From 3af89f8bdff9b012a3737c6b6dd5d7cd2de1a1b8 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Sun, 11 May 2014 10:23:34 +0000 Subject: [PATCH] re PR c++/59705 (possible compiler bug regarding SFINAE (program compiles fine)) 2014-05-11 Paolo Carlini PR c++/59705 * g++.dg/cpp0x/sfinae51.C: New. PR c++/58353 * g++.dg/cpp0x/variadic157.C: New. From-SVN: r210310 --- gcc/testsuite/ChangeLog | 8 +++++++ gcc/testsuite/g++.dg/cpp0x/sfinae51.C | 28 ++++++++++++++++++++++++ gcc/testsuite/g++.dg/cpp0x/variadic157.C | 28 ++++++++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp0x/sfinae51.C create mode 100644 gcc/testsuite/g++.dg/cpp0x/variadic157.C diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e6460e946fb3..bcf4038f7765 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2014-05-11 Paolo Carlini + + PR c++/59705 + * g++.dg/cpp0x/sfinae51.C: New. + + PR c++/58353 + * g++.dg/cpp0x/variadic157.C: New. + 2014-05-10 Oleg Endo 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 000000000000..380811dce032 --- /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 +constexpr bool foo(const T &, typename T::const_iterator *) +{ + return true; +} + +template +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(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 000000000000..40aa3801d066 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/variadic157.C @@ -0,0 +1,28 @@ +// PR c++/58353 +// { dg-do compile { target c++11 } } + +template +struct seq_t +{ + template struct seq{}; + + template + struct gen : gen{}; + + template + struct gen<0, Es...> : seq{}; + + struct bits_t{ E e[CNT]; }; + + template + static bits_t init(seq) {return {{Es...}};} + + static bits_t init() {return init(gen{});} +}; + +typedef seq_t wow; + +int main() +{ + wow::init(); +} -- 2.47.3