https://issues.dlang.org/show_bug.cgi?id=21124
Issue ID: 21124 Summary: Multiple templated is expressions used with logical operators Product: D Version: D2 Hardware: x86 OS: Linux Status: NEW Severity: enhancement Priority: P1 Component: dmd Assignee: nob...@puremagic.com Reporter: john.michael.h...@gmail.com The code below fails to compile because the template parameter U is in both is statements in isFoo. The code for isFoo2, which changes the U in the second is statement, compiles without error. I see nothing in the specification that would suggest that isFoo should fail to compile, though I may have missed it. Nevertheless, there is a workaround. struct Foo(T) { T x; } struct Foo(T, U) { T x; } enum bool isFoo(T) = is(T : Foo!(U), U) || is(T : Foo!(U, V), U, V); enum bool isFoo2(T) = is(T : Foo!(U), U) || is(T : Foo!(W, V), W, V); void main() { static assert(isFoo!(Foo!(int))); static assert(isFoo!(Foo!(int, int))); static assert(isFoo2!(Foo!(int))); static assert(isFoo2!(Foo!(int, int))); } --