On 11/15/2012 03:06 PM, bearophile wrote:
      void check() const pure nothrow {
          immutable real p = a ^^ 2 + b ^^ 2;
          assert(sqrt(p) < 10);
      }

Is it appropriate to have 'nothrow' given that the assert could fail?

Strive to write D code as much cast-free as possible, because
they are dangerous.

The practical situation I'm dealing with is that the a struct gets built inside a function, based on data read from files. Once the data has been written to the struct, it should never be changed again.

i.e.

struct Foo
{
     // contains a few different arrays of data
     void add( /* adds new data points to collection */) { ... }
}

auto makeFoo()
{
    Foo foo;
    foreach( /* lots of data */ )
        foo.add( /* new data point */ );
    return foo;
}

So, in practice, it seems like that function should cast it to immutable as it returns -- and this would be safe, no?

By the way, I should add -- I recognize I'm deluging the list with a bunch of questions in these last days, and I'm very grateful for the amount of advice you and others have been giving. I hope it's not becoming too overwhelming or annoying!

Reply via email to