PR c++/85553
[official-gcc.git] / gcc / testsuite / g++.dg / cpp0x / variadic161.C
blobac6eaf6a36a52e46786bbd5b1616760e7565a175
1 // PR c++/63139
2 // { dg-do compile { target c++11 } }
4 template<typename ...T>
5 struct type_list {};
7 template<typename ...T>
8 struct make_type_list
10     using type = type_list<T...>;
13 // The bug disappears if you use make_type_list directly.
14 template<typename ...T>
15 using make_type_list_t = typename make_type_list<T...>::type;
18 struct ContainerEndA {};
20 template<typename ...Ts>
21 struct ContainerA
23     using type = make_type_list_t<Ts..., ContainerEndA>;
27 struct ContainerEndB {};
29 template<typename ...Ts>
30 struct ContainerB
32     using type = make_type_list_t<Ts..., ContainerEndB>;
35 template<typename T, typename U>
36 struct is_same
38   static const bool value = false;
41 template<typename T>
42 struct is_same<T, T>
44   static const bool value = true;
47 #define SA(X) static_assert((X), #X)
49 SA((is_same<ContainerB<>::type, type_list<ContainerEndB>>::value));
50 SA((!is_same<ContainerA<>::type, type_list<ContainerEndB>>::value));
51 SA((!is_same<ContainerA<>::type, ContainerB<>::type>::value));