1 // REQUIRED_ARGS: -o- 2 // PERMUTE_ARGS: -w 3 foo(Args...)4int foo(Args...)() 5 { 6 int x; 7 8 foreach (arg; Args) 9 { 10 static if(is(arg == int)) 11 { 12 return 0; 13 } 14 static if(is(arg == long)) 15 { 16 // fallthrough 17 ++x; // this statement might be unreachable, but 18 // UnrollStatement does not warn that. 19 } 20 } 21 // no return 22 } 23 main()24void main() 25 { 26 auto r1 = foo!(int)(); // return 27 auto r2 = foo!(int, long)(); // return -> fallthrough (it's unreachable) 28 auto r3 = foo!(long, int)(); // fallthough -> return 29 static assert(!__traits(compiles, foo!(long)())); // fallthough 30 static assert(!__traits(compiles, foo!(long, long)())); // fallthough -> fallthough 31 } 32