// { dg-options "-std=gnu++0x" } 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" } int a2b[metatuple::value == 2? 1 : -1]; int a3[metatuple::value == 3? 1 : -1]; // { dg-error "ambiguous" } int a4[metatuple::value == 4? 1 : -1]; int a5[metatuple::value == 5? 1 : -1]; // { dg-error "incomplete" "" { target *-*-* } 40 } // { dg-error "incomplete" "" { target *-*-* } 42 }