On 08/23/2012 12:38 PM, Dmitry Olshansky wrote:
On 23-Aug-12 23:33, Namespace wrote:
But to write your own init property would still be nice, or not?

Either way it has to be CTFEable. Can't you just do:

struct A{
X field = generateX();
}

and thus set .init to whatever you want.
Otherwise it will inevitably rise question of the point of "= x;" syntax
if initializes are overridden by custom .init.


Yes, that works:

struct S
{
    int i = init_i();
    double d = init_d();

    static int init_i()
    {
        return 42;
    }

    static double init_d()
    {
        return 1.5;
    }
}

void main()
{
    assert(S().i == 42);
    assert(S().d == 1.5);
}

So the language doesn't give us the ability to define a CTFE-able default constructor but writing individual "constructors" for each member works.

Ali

Reply via email to