https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69009
Markus Trippelsdorf <trippels at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2015-12-22 CC| |trippels at gcc dot gnu.org Ever confirmed|0 |1 Known to fail| |5.3.0, 6.0 --- Comment #1 from Markus Trippelsdorf <trippels at gcc dot gnu.org> --- markus@x4 tmp % cat tuple_size.pass.cc using _uchar = char; using _size_t = decltype(sizeof(_uchar)); using size_t = _size_t; template <class T, T> struct integral_constant; template <bool b> using bool_constant = integral_constant<bool, b>; template <class> constexpr auto tuple_size_v = 0; template <class T> auto const tuple_size_v<T const volatile> = tuple_size_v<T>; template <class T> using tuple_size = integral_constant<size_t, tuple_size_v<T>>; template <typename Base, typename Deriv> using is_base_of = bool_constant<__is_base_of(Base, Deriv)>; template <class T, size_t N> void test() { is_base_of<integral_constant<size_t, N>, tuple_size<T>> value( is_base_of<integral_constant<size_t, N>, tuple_size<const volatile T>>); } void foo() { test<int, 0>; } markus@x4 tmp % g++ -std=c++14 -c tuple_size.pass.cc tuple_size.pass.cc: In instantiation of ‘void test() [with T = int; long unsigned int N = 0ul]’: tuple_size.pass.cc:16:26: required from here tuple_size.pass.cc:13:59: internal compiler error: in instantiate_decl, at cp/pt.c:21511 Both gcc-5 and gcc-6 ICE. gcc-4.9 rejects the testcase. markus@x4 tmp % clang++ -w -std=c++14 -c tuple_size.pass.cc markus@x4 tmp %