template canBeAlias(T...)
if (T.length == 1)
{
        static if (is(typeof({alias _ = T[0];})))
        {
                enum canBeAlias = true;
        }
        else
        {
                enum canBeAlias = false;
        }
}

pragma(msg, canBeAlias!canBeAlias); //prints "true"
static assert(!canBeAlias!true); //passes
static assert(canBeAlias!(canBeAlias!canBeAlias)); //passes?!

What is going on here? `canBeAlias!canBeAlias` evaluates down to true, so why is `canBeAlias!true` false when `canBeAlias!(canBeAlias!canBeAlias)` is true?

Reply via email to