On Tuesday, 14 November 2017 at 23:41:39 UTC, Steven Schveighoffer wrote:
An very similar problem exists for int and char overloads:

alias foo = (char c) => 1;
alias foo = (int i) => 4;

enum int e = 7;
static assert(foo(e) == 4); // fails

Wait a minute!  This doesn't appear to be a casting or overload problem.  Can you really overload aliases in D?

In fact, I'm surprised you can alias to an expression like that. Usually you need a symbol. It's probably due to how this is lowered.

Boy did I "step in it" with my original post: Started out with one issue and ended up with 3.

I looked at what the compiler is doing, and it is generated a new symbol (e.g. `__lambda4`). I suspect this is not intended.

My question now is, should the compiler actually be treating the lambda as an expression instead of a new symbol, thus disallowing it altogether? (sigh! more breakage)?

Mike

Reply via email to