Files
clang-p2996/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p4.cpp
Douglas Gregor 7345626a5b 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.

llvm-svn: 150168
2012-02-09 10:18:50 +00:00

43 lines
882 B
C++

// 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);
}