alias this constructor

Jonathan M Davis newsgroup.d at jmdavisprog.com
Sun Mar 25 01:51:02 UTC 2018


On Sunday, March 25, 2018 00:47:20 Dave Jones via Digitalmars-d wrote:
> struct Foo
> {
>      int x;
>      alias x this;
> }
>
> Foo f = 12; // error
>
> Foo foo;
> f = 12;     // this is OK
>
> any reason why the first cant be allowed?

Because it was deemed to cause too many problems. C++ code can have quite a
few problems related to all of the implicit conversions it allows with stuff
like constructing objects. Walter decided that D would be better off if it
did not allow such conversions, and as such, D is much pickier about
implicit conversions in general.

Occasionally, the restrictions are annoying, but they also prevent bugs. I
have no idea whether Walter could be convinced at this point to allow some
sort of implicit construction in D or not.

Personally, I tend to think that we'd be better off if we didn't have alias
this at all, because it tends to cause problems in anything outside of
simple use cases (especially with generic code - implicit conversions in
generic code are almost always a terrible idea). Sometimes, it's useful, but
it's often just a recipe for subtle bugs. But at least the fact that D only
allows you to implicitly convert in one direction reduces the problem.

- Jonathan M Davis



More information about the Digitalmars-d mailing list