PR c++/85765 - SFINAE and non-type default template arg.
[official-gcc.git] / gcc / testsuite / g++.dg / cpp0x / sfinae61.C
blob9e7145305e02b5755cb18617ee00901a536dcb0e
1 // PR c++/78489
2 // { dg-do compile { target c++11 } }
4 template <bool Pred, class T> struct enable_if { typedef T type; };
5 template <class T> struct enable_if<false, T> {};
7 template <int Idx> struct blows_up { static_assert(Idx != Idx, ""); };
9 template <int Idx,
10            // substitution should fail here
11           typename enable_if<Idx != Idx, int>::type = 0,
12           // GCC evaluates this statement
13           class = typename blows_up<Idx>::type 
15 void Foo() {}
17 // Check the constructor in as SFINAE context
18 template <int I> constexpr auto test(int) -> decltype((Foo<I>(), true)) { return true; }
19 template <int>   constexpr bool test(long) { return false; }
21 static_assert(!test<3>(0), ""); // Blows up