1 // RUN: %clang_cc1 -std=c++0x -fsyntax-only -verify %s 2 3 namespace ParameterPacksWithFunctions { 4 template<typename ...> struct count; 5 6 template<typename Head, typename ...Tail> 7 struct count<Head, Tail...> { 8 static const unsigned value = 1 + count<Tail...>::value; 9 }; 10 11 template<> 12 struct count<> { 13 static const unsigned value = 0; 14 }; 15 16 template<unsigned> struct unsigned_c { }; 17 18 template<typename ... Types> 19 unsigned_c<count<Types...>::value> f(); 20 21 void test_f() { 22 unsigned_c<0> uc0a = f(); // okay, deduced to an empty pack 23 unsigned_c<0> uc0b = f<>(); 24 unsigned_c<1> uc1 = f<int>(); 25 unsigned_c<2> uc2 = f<float, double>(); 26 } 27 } 28