enum Foo(alias T : Bar!U, U...) = true; template Bar(T...) { alias b = T; } // These compile as expected: static assert(Foo!(Bar!int)); static assert(!__traits(compiles, Foo!(Bar!int))); // While this asserts: static assert(is(Bar!int : Bar!T, T...));