On Thu, 23 May 2013 19:03:25 -0400, Artur Skawina <[email protected]> wrote:

On 05/23/13 23:06, Steven Schveighoffer wrote:

compiles:

struct S
{
   const int x;
   this(int n)
   {
    x = n;
   }
}

It's the 'const int x = 42;' case we're talking about. *That* one does not compile and doesn't need to. It /could/, but I see no reason to allow this;

My example is essentially:

const int x = 0;

It is default initialized to 0, and then the ctor can initialize it to something else.

To say that

const int x = 42;

is different is inconsistent. Both are consts stored inside each instance, written by the compiler before the ctor is called. Then the ctor is free to initialize them away from the default.

What you want is a feature that defines a struct field as always a certain value and NOT changeable, even in the ctor. As far as I know, that does not exist in D, and seems specialized to protocol layouts (normally you do not want to waste memory with a field that never changes and is always known at compile-time). As the initializer syntax already is taken, you will need a new syntax, or improve the optimizer to be able to prove this is the case.

-Steve

Reply via email to