Template pred is true for pred!(pred!(pred)) but not for value "true"

Meta via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Mar 8 08:41:21 PDT 2015


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?


More information about the Digitalmars-d-learn mailing list