blob: bd91468c3ad2108f977160e15ba2fb3a579f75bf [file] [log] [blame]
module test1673;
template Foo(T...) { }
template Bar(T...)
{
template Doo(T...)
{
}
}
template Tuple(T...) { alias Tuple = T; }
void main()
{
static assert( __traits(isTemplate, Foo));
static assert(!__traits(isTemplate, Foo!int));
static assert(!__traits(isTemplate, main));
static assert( __traits(isTemplate, Bar));
static assert(!__traits(isTemplate, Bar!int));
static assert( __traits(isTemplate, Bar!(int).Doo));
static assert(!__traits(isTemplate, Bar!(int).Doo!int));
alias Tup = Tuple!(Foo, Foo!int, Bar, Bar!int, Bar!(int).Doo, Bar!(int).Doo!int);
static assert( __traits(isTemplate, Tup[0]));
static assert(!__traits(isTemplate, Tup[1]));
static assert( __traits(isTemplate, Tup[2]));
static assert(!__traits(isTemplate, Tup[3]));
static assert( __traits(isTemplate, Tup[4]));
static assert(!__traits(isTemplate, Tup[5]));
}
/// test overloads
void foo_over() { }
void foo_over(T : int)(T) { }
void foo_over(T : float)(T) { }
static assert(__traits(isTemplate, foo_over));
/// ditto
void bar_over() { }
void bar_over(int) { }
static assert(!__traits(isTemplate, bar_over));
/// alias to overloads
alias a_foo_over = foo_over;
static assert(__traits(isTemplate, a_foo_over));
/// ditto
alias a_bar_over = bar_over;
static assert(!__traits(isTemplate, a_bar_over));