Can we drop static struct initializers?

Bill Baxter wbaxter at gmail.com
Fri Nov 20 11:16:24 PST 2009


On Thu, Nov 19, 2009 at 9:48 PM, Don <nospam at nospam.com> wrote:
> Now that we have struct literals, the old C-style struct initializers don't
> seem to be necessary.
> The variations with named initializers are not really implemented -- the
> example in the spec doesn't work, and most uses of them cause compiler
> segfaults or wrong code generation. EG...
>
> struct Move{
>   int D;
> }
> enum Move genMove = { D:4 };
> immutable Move b = genMove;
>
> It's not difficult to fix these compiler problems, but I'm just not sure if
> it's worth implementing. Maybe they should just be dropped? (The { field:
> value } style anyway).

Here's one thing I just found:
struct constructors don't work at compile-time:

struct Struct
{
    this(int _n, float _x) {
        n = _n; x = _x;
    }
    int n;
    float x;
}

enum A = Struct(1,2);

// Error: cannot evaluate ((Struct __ctmp1;
// ) , __ctmp1).this(1,2F) at compile time

The C-style initializer works.
static opCall works too.

But if that bug is fixed, then I can't think of a reason to have the
classic C-style no-colons syntax.

--bb



More information about the Digitalmars-d mailing list