diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2014-05-11 10:23:34 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2014-05-11 10:23:34 +0000 |
commit | 3af89f8bdff9b012a3737c6b6dd5d7cd2de1a1b8 (patch) | |
tree | eb4ac37251c46ec3b6322af86a298659ed6993cc | |
parent | 6f8531afe15df06ddda3b0a72eacddb1cc223e33 (diff) | |
download | gcc-3af89f8bdff9b012a3737c6b6dd5d7cd2de1a1b8.zip gcc-3af89f8bdff9b012a3737c6b6dd5d7cd2de1a1b8.tar.gz gcc-3af89f8bdff9b012a3737c6b6dd5d7cd2de1a1b8.tar.bz2 |
re PR c++/59705 (possible compiler bug regarding SFINAE (program compiles fine))
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.
From-SVN: r210310
-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(); +} |