Files
clang-p2996/clang/test/CXX/expr/expr.prim/expr.prim.lambda/p14.cpp
Douglas Gregor 8c50e7c5e3 Various interrelated cleanups for lambdas:
- Complete the lambda class when we finish the lambda expression
    (previously, it was left in the "being completed" state)
  - Actually return the LambdaExpr object and bind to the resulting
  temporary when needed.
  - Detect when cleanups are needed while capturing a variable into a
  lambda (e.g., due to default arguments in the copy constructor), and
  make sure those cleanups apply for the whole of the lambda
  expression.
    

llvm-svn: 150123
2012-02-09 00:47:04 +00:00

32 lines
1021 B
C++

// RUN: %clang_cc1 -fsyntax-only -std=c++11 %s -verify
class NonCopyable {
NonCopyable(const NonCopyable&); // expected-note 2 {{implicitly declared private here}}
};
void capture_by_copy(NonCopyable nc, NonCopyable &ncr) {
// FIXME: error messages should talk about capture
(void)[nc] { }; // expected-error{{field of type 'NonCopyable' has private copy constructor}} \
// expected-error{{lambda expressions are not supported yet}}
(void)[ncr] { }; // expected-error{{field of type 'NonCopyable' has private copy constructor}} \
// expected-error{{lambda expressions are not supported yet}}
}
struct NonTrivial {
NonTrivial();
NonTrivial(const NonTrivial &);
~NonTrivial();
};
struct CopyCtorDefault {
CopyCtorDefault(const CopyCtorDefault&, NonTrivial nt = NonTrivial());
void foo() const;
};
void capture_with_default_args(CopyCtorDefault cct) {
(void)[=] () -> void { cct.foo(); }; // expected-error{{lambda expressions are not supported yet}}
}
// FIXME: arrays!