Viewing file: variadic161.C (1007 B) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
// PR c++/63139 // { dg-do compile { target c++11 } }
template<typename ...T> struct type_list {};
template<typename ...T> struct make_type_list { using type = type_list<T...>; };
// The bug disappears if you use make_type_list directly. template<typename ...T> using make_type_list_t = typename make_type_list<T...>::type;
struct ContainerEndA {};
template<typename ...Ts> struct ContainerA { using type = make_type_list_t<Ts..., ContainerEndA>; };
struct ContainerEndB {};
template<typename ...Ts> struct ContainerB { using type = make_type_list_t<Ts..., ContainerEndB>; };
template<typename T, typename U> struct is_same { static const bool value = false; };
template<typename T> struct is_same<T, T> { static const bool value = true; };
#define SA(X) static_assert((X), #X)
SA((is_same<ContainerB<>::type, type_list<ContainerEndB>>::value)); SA((!is_same<ContainerA<>::type, type_list<ContainerEndB>>::value)); SA((!is_same<ContainerA<>::type, ContainerB<>::type>::value));
|