diff options
Diffstat (limited to 'test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp')
-rw-r--r-- | test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp b/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp new file mode 100644 index 0000000000..b5a445cd9e --- /dev/null +++ b/test/CXX/expr/expr.prim/expr.prim.lambda/p19.cpp @@ -0,0 +1,31 @@ +// RUN: %clang_cc1 -std=c++11 %s -Wunused -verify + +struct MoveOnly { + MoveOnly(MoveOnly&&); + MoveOnly(const MoveOnly&); +}; + +template<typename T> T &&move(T&); +void test_special_member_functions(MoveOnly mo, int i) { + // FIXME: terrible note + auto lambda1 = [i]() { }; // expected-note{{function has been explicitly marked deleted here}} \ + // expected-note{{the implicit copy assignment operator}} \ + // expected-note{{the implicit move assignment operator}} \ + + // Default constructor + decltype(lambda1) lambda2; // expected-error{{call to deleted constructor}} + + // Copy assignment operator + lambda1 = lambda1; // expected-error{{overload resolution selected deleted operator '='}} + + // Move assignment operator + lambda1 = move(lambda1); + + // Copy constructor + decltype(lambda1) lambda3 = lambda1; + decltype(lambda1) lambda4(lambda1); + + // Move constructor + decltype(lambda1) lambda5 = move(lambda1); + decltype(lambda1) lambda6(move(lambda1)); +} |