multi-level-substitution.cpp revision c3069d618f4661d923cb1b5c4525b082fce73b04
1// RUN: %clang_cc1 -std=c++0x -fsyntax-only -verify %s 2 3template<typename T, T ...Values> struct value_tuple {}; 4 5template<typename T> 6struct X0 { 7 template<T ...Values> 8 void f(value_tuple<T, Values...> * = 0); 9}; 10 11void test_X0() { 12 X0<int>().f<1, 2, 3, 4, 5>(); 13} 14 15namespace PacksAtDifferentLevels { 16 template<typename...> struct tuple { }; 17 template<typename T, typename U> struct pair { }; 18 19 template<typename ...Types> 20 struct X { 21 template<typename> struct Inner; 22 23 template<typename ...YTypes> 24 struct Inner<tuple<pair<Types, YTypes>...> > { 25 static const unsigned zero = sizeof...(Types) - sizeof...(YTypes); 26 }; 27 }; 28 29 int check0[X<short, int, long>::Inner<tuple<pair<short, unsigned short>, 30 pair<int, unsigned int>, 31 pair<long, unsigned long>> 32 >::zero == 0? 1 : -1]; 33} 34