diff options
author | Douglas Gregor <dgregor@apple.com> | 2012-02-09 10:18:50 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2012-02-09 10:18:50 +0000 |
commit | 54042f1bd78f1f1ea86be7d4af541462e127d2ed (patch) | |
tree | 5adac67898a64f117ef4f912044173465cc121ad /test/CXX/expr/expr.prim/expr.prim.lambda/p4.cpp | |
parent | 760b37bcae12f4bbc68bb6cabf6ed68d265b0826 (diff) |
Implement return type deduction for lambdas per C++11
[expr.prim.lambda]p4, including the current suggested resolution of
core isue 975, which allows multiple return statements so long as the
types match. ExtWarn when user code is actually making use of this
extension.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150168 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CXX/expr/expr.prim/expr.prim.lambda/p4.cpp')
-rw-r--r-- | test/CXX/expr/expr.prim/expr.prim.lambda/p4.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/test/CXX/expr/expr.prim/expr.prim.lambda/p4.cpp b/test/CXX/expr/expr.prim/expr.prim.lambda/p4.cpp new file mode 100644 index 0000000000..a3a29c0977 --- /dev/null +++ b/test/CXX/expr/expr.prim/expr.prim.lambda/p4.cpp @@ -0,0 +1,42 @@ +// RUN: %clang_cc1 -fsyntax-only -std=c++11 %s -verify + +void missing_lambda_declarator() { + [](){}(); +} + +template<typename T> T get(); + +void infer_void_return_type(int i) { + if (i > 17) + return []() { }(); + + if (i > 11) + return []() { return; }(); + + return [](int x) { + switch (x) { + case 0: return get<void>(); + case 1: return; + } + }(7); +} + +struct X { }; + +X infer_X_return_type(X x) { + return [&x](int y) { // expected-warning{{omitted result type}} + if (y > 0) + return X(); + else + return x; + }(5); +} + +X infer_X_return_type_fail(X x) { + return [x](int y) { // expected-warning{{omitted result type}} + if (y > 0) + return X(); + else // FIXME: shouldn't mention blocks + return x; // expected-error{{return type 'const X' must match previous return type 'X' when block literal has unspecified explicit return type}} + }(5); +} |