diff options
author | abutcher <abutcher@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-11-12 20:17:54 +0000 |
---|---|---|
committer | abutcher <abutcher@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-11-12 20:17:54 +0000 |
commit | 2873e7a09ea37c5a6d10e27cf44993e97f9b7b7f (patch) | |
tree | 540d878a5c2ef93aa23b5ae66f7d9cfd43438ae3 /gcc/testsuite/g++.dg/cpp1y/lambda-generic-dep.C | |
parent | 520877fb31003ff8a00dd5f1170849dd15d8f4e8 (diff) | |
download | gcc-2873e7a09ea37c5a6d10e27cf44993e97f9b7b7f.tar.gz |
Add some generic lambda test cases.
gcc/testsuite/g++.dg/cpp1y/
* lambda-generic.C: New test case.
* lambda-generic-cfun.C: New test case.
* lambda-generic-dep.C: New test case.
* lambda-generic-udt.C: New test case.
* lambda-generic-variadic.C: New test case.
* lambda-generic-x.C: New test case.
* lambda-generic-xcfun.C: New test case.
* lambda-generic-xudt.C: New test case.
* lambda-generic-mixed.C: New test case.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@204716 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite/g++.dg/cpp1y/lambda-generic-dep.C')
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/lambda-generic-dep.C | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/cpp1y/lambda-generic-dep.C b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-dep.C new file mode 100644 index 00000000000..bb687381978 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-dep.C @@ -0,0 +1,42 @@ +// Generic lambda type dependence test part from N3690 5.1.2.12 +// { dg-options "-std=c++1y" } + +void f(int, const int (&)[2] = {}) { } // #1 +void f(const int&, const int (&)[1]) { } // #2 + +void test() +{ + const int x = 17; + auto g = [](auto a) { + f(x); // OK: calls #1, does not capture x + }; + auto g2 = [=](auto a) { + int selector[sizeof(a) == 1 ? 1 : 2]{}; + f(x, selector); // OK: is a dependent expression, so captures x + }; +} + +struct S { + struct N { + auto test () { return 7.f; } + }; +}; + +#include <utility> + +int main() +{ + auto f = [] <typename T> (T const& s) mutable { + typename T::N x; + return x.test (); + }; + auto g = [] (auto const& s) { + typename std::decay<decltype (s)>::type::N x; + return x.test (); + }; + + S i; + f(i); + g(i); +} + |