On Sunday, 25 March 2018 at 00:47:20 UTC, Dave Jones wrote:
struct Foo
{
    int x;
    alias x this;
}

Foo f = 12; // error

You just need to define a constructor that takes an int. alias this is all about taking an existing object and substituting a member for it - emphasis on *existing* object, so it needs to already be constructed.

But you can construct from other types

struct Foo {
   int x;
   this(int x) { this.x = x; }
}

Foo f = 12; // allowed, calls that constructor

Foo foo;
f = 12;     // this is OK

Important to note that foo already exists here and is NOT reconstructed - the compiler just rewrites that into `f.x = 12;`, doing a member assignment.

Reply via email to