diff options
Diffstat (limited to 'gcc/testsuite/g++.dg/cpp0x/constexpr-targ2.C')
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/constexpr-targ2.C | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-targ2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-targ2.C new file mode 100644 index 00000000000..285d6c9c130 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-targ2.C @@ -0,0 +1,40 @@ +// PR c++/65498 +// { dg-do compile { target c++11 } } + +template <typename, typename> +struct is_same +{ + enum { value = false }; + constexpr bool operator()() const noexcept { return value; } +}; + +template <typename T> +struct is_same<T, T> +{ + enum { value = true }; + constexpr bool operator()() const noexcept { return value; } +}; + +template <bool, typename = void> +struct enable_if { }; + +template <typename T> +struct enable_if<true, T> { typedef T type; }; + +struct A; + +template <typename, typename = void> +struct F { }; + +template <typename X> +struct F<X, typename enable_if<is_same<X, A>{}()>::type> { + template <typename MakeDependent> + F(MakeDependent) { + auto ICE_HERE = __func__; + (void)ICE_HERE; // avoid -Wunused-variable + } +}; + +int main() { + F<A>{1}; +} |