https://issues.dlang.org/show_bug.cgi?id=23833
--- Comment #2 from james.g...@remss.net --- (In reply to RazvanN from comment #1) > The compiler does auto dereferencing only when the lhs of a dot expression > is a pointer to an aggregate type (struct, class, interface, union). That > does not mean that a pointer is going to always be dereferenced > automatically. If that would be the case then that would confuse the > overload resolution for situations such as: > > foo(int a); > foo(int* a); > > Int* x; > foo(x); -> ambiguity > > Of course, a set of rules can be invented to properly implement this, > however, the current rules are much simpler to explain: "Whenever the lhs of > a dot expression is a pointer to an aggregate type, it will automatically be > dereferenced". > > As such, in your example, `foo(x)` is an error because there is no dot > expression involved and type of x is Int*. > > foo(x.val) works because you have a dot expression and the compiler rewrites > to foo((*x).val). > > foo(*x) works because type Int has an alias this. > > As such, this bug report is an enhancement request at best, however, most > likely it is not going to fly because the current rules are simple and work, > whereas what is proposed is going to affect parts of the compiler in serious > ways for no apparent benefit. > > Closing as WONTFIX. Fair enough. --