diff options
-rw-r--r-- | gcc/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/sfinae51.C | 28 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/variadic157.C | 28 |
3 files changed, 64 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e6460e9..bcf4038 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2014-05-11 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/59705 + * g++.dg/cpp0x/sfinae51.C: New. + + PR c++/58353 + * g++.dg/cpp0x/variadic157.C: New. + 2014-05-10 Oleg Endo <olegendo@gcc.gnu.org> PR target/51244 diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae51.C b/gcc/testsuite/g++.dg/cpp0x/sfinae51.C new file mode 100644 index 0000000..380811d --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/sfinae51.C @@ -0,0 +1,28 @@ +// PR c++/59705 +// { dg-do compile { target c++11 } } + +struct HasIter { + typedef int * const_iterator; +}; + +struct NoIter { +}; + +template <typename T> +constexpr bool foo(const T &, typename T::const_iterator *) +{ + return true; +} + +template <typename T> +constexpr bool foo(const T &, ...) +{ + return false; +} + +HasIter has_iter; +NoIter no_iter; + +static_assert (!foo(no_iter, 0), ""); +static_assert (foo(has_iter, 0), ""); +static_assert (foo<HasIter>(has_iter, 0), ""); diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic157.C b/gcc/testsuite/g++.dg/cpp0x/variadic157.C new file mode 100644 index 0000000..40aa380 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/variadic157.C @@ -0,0 +1,28 @@ +// PR c++/58353 +// { dg-do compile { target c++11 } } + +template<class E, E V, int CNT> +struct seq_t +{ + template<E... Es> struct seq{}; + + template<int N, E... Es> + struct gen : gen<N - 1, V, Es...>{}; + + template<E... Es> + struct gen<0, Es...> : seq<Es...>{}; + + struct bits_t{ E e[CNT]; }; + + template<E... Es> + static bits_t init(seq<Es...>) {return {{Es...}};} + + static bits_t init() {return init(gen<CNT>{});} +}; + +typedef seq_t<int, 123, 5> wow; + +int main() +{ + wow::init(); +} |