// PR c++/63139 // { dg-do compile { target c++11 } } template struct type_list {}; template struct make_type_list { using type = type_list; }; // The bug disappears if you use make_type_list directly. template using make_type_list_t = typename make_type_list::type; struct ContainerEndA {}; template struct ContainerA { using type = make_type_list_t; }; struct ContainerEndB {}; template struct ContainerB { using type = make_type_list_t; }; template struct is_same { static const bool value = false; }; template struct is_same { static const bool value = true; }; #define SA(X) static_assert((X), #X) SA((is_same::type, type_list>::value)); SA((!is_same::type, type_list>::value)); SA((!is_same::type, ContainerB<>::type>::value));