On 11/14/17 6:14 PM, Michael V. Franklin wrote:
On Tuesday, 14 November 2017 at 13:20:22 UTC, Nick Treleaven 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.

Indeed, this is a completely different problem:

enum int e = 500;
static assert(foo(e) == 4); // fails to compile (can't call char with 500)

If you define foo as an actual overloaded function set, it works as expected.


I would expect the compiler to throw an error as `foo` is being redefined.  Or for `foo` to be replaced by the most recent assignment in lexical order.  Am I missing something?

In this case, the compiler simply *ignores* the newest definition. It should throw an error IMO.

-Steve



Reply via email to