aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2017-09-30 20:42:05 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2017-09-30 20:42:05 +0000
commitae3f9c32ae1f80e52318318fd749c0237c19e4e8 (patch)
treef103832b0a860816591491d889074df60cc8674c /gcc
parent333cb61200ca99b916a71e989e25cf68a6ab597a (diff)
downloadgcc-ae3f9c32ae1f80e52318318fd749c0237c19e4e8.zip
gcc-ae3f9c32ae1f80e52318318fd749c0237c19e4e8.tar.gz
gcc-ae3f9c32ae1f80e52318318fd749c0237c19e4e8.tar.bz2
re PR c++/65949 (Compiler can not deduce auto type in lambda)
2017-09-30 Paolo Carlini <paolo.carlini@oracle.com> PR c++/65949 * g++.dg/cpp1y/lambda-generic-variadic5.C: New. From-SVN: r253322
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic5.C61
2 files changed, 66 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index cd4688e..fcf901a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2017-09-30 Paolo Carlini <paolo.carlini@oracle.com>
+ PR c++/65949
+ * g++.dg/cpp1y/lambda-generic-variadic5.C: New.
+
+2017-09-30 Paolo Carlini <paolo.carlini@oracle.com>
+
PR c++/68754
* g++.dg/cpp1y/constexpr-68754.C: Move...
* g++.dg/cpp0x/constexpr-68754.C: ... here, adjust.
diff --git a/gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic5.C b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic5.C
new file mode 100644
index 0000000..6dbb9c8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic5.C
@@ -0,0 +1,61 @@
+// PR c++/65949
+// { dg-do compile { target c++14 } }
+
+#include <initializer_list>
+
+template<class T, class... Ts>
+struct Over : T, Over<Ts...>::type
+{
+ using type = Over;
+
+ Over(T f1, Ts... f2)
+ : T(f1), Over<Ts...>::type(f2...)
+ {
+ }
+
+ using T::operator();
+ using Over<Ts...>::type::operator();
+};
+
+template<class T>
+struct Over<T> : T
+{
+ using type = T;
+ using T::operator();
+};
+
+template <class... Lambdas>
+auto CreateLambdas(Lambdas... lambdas)
+{
+ return Over<Lambdas...>(lambdas...);
+}
+
+int main()
+{
+ auto mesLambda = CreateLambdas
+ (
+ []()
+ {
+
+ },
+
+ [](auto i)
+ {
+ (void)i;
+ },
+
+ [](auto... args)
+ {
+ auto list = {args...};
+
+ for(auto &&a : list)
+ (void)a;
+
+ return 3;
+ }
+ );
+
+ mesLambda();
+ mesLambda(1);
+ mesLambda(12,24,36,48);
+}