// { dg-do compile { target c++11 } } template struct add_pointer; template struct add_reference; template class... Metafunctions> struct metatuple { static const int value = 0; }; template<> struct metatuple { static const int value = 1; }; template class Meta> struct metatuple { // { dg-error "candidates" } static const int value = 2; }; template class... Metafunctions> struct metatuple { // { dg-error "" } static const int value = 3; }; template class First, template class... Metafunctions> struct metatuple { // { dg-error "struct" } static const int value = 4; }; template class First, template class Second, template class... Metafunctions> struct metatuple { // { dg-error "struct" } static const int value = 5; }; int a0[metatuple<>::value == 0? 1 : -1]; int a1[metatuple::value == 1? 1 : -1]; int a2a[metatuple::value == 2? 1 : -1]; // { dg-error "ambiguous|array bound" "bound" } int a2b[metatuple::value == 2? 1 : -1]; int a3[metatuple::value == 3? 1 : -1]; // { dg-error "ambiguous|array bound" "bound" } int a4[metatuple::value == 4? 1 : -1]; int a5[metatuple::value == 5? 1 : -1]; // { dg-error "incomplete" "incomplete" { target *-*-* } 40 } // { dg-error "incomplete" "incomplete" { target *-*-* } 42 }