diff options
Diffstat (limited to 'gcc/testsuite/g++.dg/cpp0x/sfinae56.C')
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/sfinae56.C | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae56.C b/gcc/testsuite/g++.dg/cpp0x/sfinae56.C new file mode 100644 index 00000000000..0f954328eb4 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/sfinae56.C @@ -0,0 +1,26 @@ +// PR c++/68926 +// { dg-do compile { target c++11 } } + +struct true_type { static constexpr bool value = true; }; +struct false_type { static constexpr bool value = false; }; + +template<bool Cond> struct enable_if { using type = void; }; +template<> struct enable_if<false> { }; + +template<typename T, typename U> struct is_same : false_type { }; +template<typename T> struct is_same<T, T> : true_type { }; + +template<typename T> +typename enable_if<is_same<int, T>::value>::type +func(); + +template<typename T, typename = decltype(func<T>)> +true_type test(T); + +false_type test(...); + +int main() +{ + decltype(test(0))::value; // ok + decltype(test(0.f))::value; // error +} |