mixin not overloading other mixins, Bug or feature?
BCS
none at anon.com
Tue Dec 22 19:40:42 PST 2009
Hello Travis,
> BCS wrote:
>
>> Hello Travis,
>>
>>> Is this a bug or a "feature"?
>>>
>> IIRC it's a fature. I forget where, but I recall reading that they
>> don't overload.
>>
> I know they don't, I am just wondering why. Is it a side
> effect/oversight of the implementation (misfeature), something that is
> suppose to work (bug) or is there a concrete reason why (feature).
>
By don't overload, I'm taking about "defined to not overload".
That removes "bug" leaving "misfeature", and "feature".
I think the rational is that allowing them to overload makes the order of
expansion hard to impossible to work out.
For example:
template Bar(T) { const bool v = true; }
template Foo(T)
{
static if(Bar!(T).v)
template Bar(U : T) { const bool v = false; }
else
template Bar(U : T) { const bool v = true; }
}
mixin Foo!(int);
static assert(Bar!(char)); // works
static assert(Bar!(int)); // what about this?
By making mixins not overload, many (if not all) such cases become illegal.
More information about the Digitalmars-d
mailing list