Fallback 'catch-all' template functions
Meta via Digitalmars-d
digitalmars-d at puremagic.com
Thu Sep 1 12:49:00 PDT 2016
On Thursday, 1 September 2016 at 19:32:23 UTC, Timon Gehr wrote:
>> Well, I'd argue that's not quite right and the correct
>> interpretation is
>> "If not the other X then this X", due to the
>> `!__traits(compiles,
>> .f!T)`, explicitly telling the compiler to check if the *other*
>> "overloads" compile.
>
> Even if that was the intention of the compiler implementation,
> the example below demonstrates why it cannot work.
>
>> I don't actually know whether template constraints
>> are considered to be at module scope or in the template scope,
>> though,
>> so maybe I'm completely wrong on this.
>> ...
>
> Template scope, but /nothing/ about '.' says "other".
It means to look up the symbol f at module scope, so I guess it
depends on whether the compiler excludes the current template
from that lookup.
template f() if (someCondition) {}
template f() if (someOtherCondition) {}
template f() if (!__traits(compiles, { alias _ = .f!(); })) {}
Does `.f` refer to all symbols named f at module scope, or all
symbols named f *other than* the symbol for which the current
template constraint is being processed?
Actually, I just convinced myself that it's obviously not the
latter and so must be the former, and now I see why this
shouldn't work.
More information about the Digitalmars-d
mailing list