1 module test1673; 2 3 template Foo(T...) { } 4 5 template Bar(T...) 6 { 7 template Doo(T...) 8 { 9 } 10 } 11 12 template Tuple(T...) { alias Tuple = T; } 13 14 void main() 15 { 16 static assert( __traits(isTemplate, Foo)); 17 static assert(!__traits(isTemplate, Foo!int)); 18 static assert(!__traits(isTemplate, main)); 19 20 static assert( __traits(isTemplate, Bar)); 21 static assert(!__traits(isTemplate, Bar!int)); 22 static assert( __traits(isTemplate, Bar!(int).Doo)); 23 static assert(!__traits(isTemplate, Bar!(int).Doo!int)); 24 25 alias Tup = Tuple!(Foo, Foo!int, Bar, Bar!int, Bar!(int).Doo, Bar!(int).Doo!int); 26 27 static assert( __traits(isTemplate, Tup[0])); 28 static assert(!__traits(isTemplate, Tup[1])); 29 static assert( __traits(isTemplate, Tup[2])); 30 static assert(!__traits(isTemplate, Tup[3])); 31 static assert( __traits(isTemplate, Tup[4])); 32 static assert(!__traits(isTemplate, Tup[5])); 33 } 34 35 /// test overloads 36 void foo_over() { } 37 void foo_over(T : int)(T) { } 38 void foo_over(T : float)(T) { } 39 static assert(__traits(isTemplate, foo_over)); 40 41 /// ditto 42 void bar_over() { } 43 void bar_over(int) { } 44 static assert(!__traits(isTemplate, bar_over)); 45 46 /// alias to overloads 47 alias a_foo_over = foo_over; 48 static assert(__traits(isTemplate, a_foo_over)); 49 50 /// ditto 51 alias a_bar_over = bar_over; 52 static assert(!__traits(isTemplate, a_bar_over));