diff options
author | Douglas Gregor <dgregor@apple.com> | 2012-02-10 08:36:38 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2012-02-10 08:36:38 +0000 |
commit | ef7d78bd5be466c369b04af742ed8268244d4fe7 (patch) | |
tree | 7cfef66f103fb26328263fabb9fdae0542bf9876 /test/CXX/expr/expr.prim/expr.prim.lambda | |
parent | 4d8d22bfaed6e5d7da6b5556415b18c43b44e36c (diff) |
Implement the conversion to a function pointer for lambda expressions,
per C++ [expr.prim.lambda]p6.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150236 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CXX/expr/expr.prim/expr.prim.lambda')
-rw-r--r-- | test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp | 6 | ||||
-rw-r--r-- | test/CXX/expr/expr.prim/expr.prim.lambda/p6.cpp | 22 |
2 files changed, 25 insertions, 3 deletions
diff --git a/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp b/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp index 9df0f64ad3..74003431c6 100644 --- a/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp +++ b/test/CXX/expr/expr.prim/expr.prim.lambda/p5.cpp @@ -15,13 +15,13 @@ void test_quals() { // This function call operator is declared const (9.3.1) if and only // if the lambda- expression's parameter-declaration-clause is not // followed by mutable. - auto l = [](){}; // expected-note{{method is not marked volatile}} + auto l = [=](){}; // expected-note{{method is not marked volatile}} const decltype(l) lc = l; l(); lc(); - auto ml = []() mutable{}; // expected-note{{method is not marked const}} \ - // expected-note{{method is not marked volatile}} + auto ml = [=]() mutable{}; // expected-note{{method is not marked const}} \ + // expected-note{{method is not marked volatile}} const decltype(ml) mlc = ml; ml(); mlc(); // expected-error{{no matching function for call to object of type}} diff --git a/test/CXX/expr/expr.prim/expr.prim.lambda/p6.cpp b/test/CXX/expr/expr.prim/expr.prim.lambda/p6.cpp new file mode 100644 index 0000000000..8b43cefa92 --- /dev/null +++ b/test/CXX/expr/expr.prim/expr.prim.lambda/p6.cpp @@ -0,0 +1,22 @@ +// RUN: %clang_cc1 -fsyntax-only -std=c++11 %s -verify + +void test_conversion() { + int (*fp1)(int) = [](int x) { return x + 1; }; + void (*fp2)(int) = [](int x) { }; + + const auto lambda = [](int x) { }; + void (*fp3)(int) = lambda; + + volatile const auto lambda2 = [](int x) { }; // expected-note{{but method is not marked volatile}} + void (*fp4)(int) = lambda2; // expected-error{{no viable conversion}} +} + +void test_no_conversion() { + int (*fp1)(int) = [=](int x) { return x + 1; }; // expected-error{{no viable conversion}} + void (*fp2)(int) = [&](int x) { }; // expected-error{{no viable conversion}} +} + +void test_wonky() { + const auto l = [](int x) mutable -> int { return + 1; }; + l(17); // okay: uses conversion function +} |