Implicit conversion in constructor
Adam D. Ruppe via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri Jul 17 20:06:22 PDT 2015
On Saturday, 18 July 2015 at 02:28:09 UTC, tcak wrote:
> I even am not sure how in the world it allows implicit
> conversion from class to struct in "fine" at all.
Given:
struct Foo {
T x;
alias x this;
}
Any time you do
Foo foo;
foo.something = whatever;
// or
foo = whatever;
// or
whatever = foo;
It first tries that code directly. If that doesn't work, it then
tries rewriting `foo` into `foo.x`:
foo.x.something = whatever;
foo.x = whatever;
whatever = foo.x;
And if that compiles, you're all set, that code gets generated.
The OP's situation is just case #2 here. The compiler is taking
the illegal `thing = new Foo;` and rewriting it into the legal
`thing.foo = new Foo;` automatically via alias this.
More information about the Digitalmars-d-learn
mailing list