diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2017-09-30 20:42:05 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2017-09-30 20:42:05 +0000 |
commit | ae3f9c32ae1f80e52318318fd749c0237c19e4e8 (patch) | |
tree | f103832b0a860816591491d889074df60cc8674c /gcc | |
parent | 333cb61200ca99b916a71e989e25cf68a6ab597a (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/lambda-generic-variadic5.C | 61 |
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); +} |