diff options
Diffstat (limited to 'clang/test/CXX/expr/expr.prim/expr.prim.lambda/blocks.cpp')
| -rw-r--r-- | clang/test/CXX/expr/expr.prim/expr.prim.lambda/blocks.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/clang/test/CXX/expr/expr.prim/expr.prim.lambda/blocks.cpp b/clang/test/CXX/expr/expr.prim/expr.prim.lambda/blocks.cpp index 0806828c83e..3301b29135d 100644 --- a/clang/test/CXX/expr/expr.prim/expr.prim.lambda/blocks.cpp +++ b/clang/test/CXX/expr/expr.prim/expr.prim.lambda/blocks.cpp @@ -13,3 +13,23 @@ void conversion_to_block(int captured) { const auto lambda = [=](int x) { return x + captured; }; int (^b2)(int) = lambda; } + +template<typename T> +class ConstCopyConstructorBoom { +public: + ConstCopyConstructorBoom(ConstCopyConstructorBoom&); + + ConstCopyConstructorBoom(const ConstCopyConstructorBoom&) { + T *ptr = 1; // expected-error{{cannot initialize a variable of type 'float *' with an rvalue of type 'int'}} + } + + void foo() const; +}; + +void conversion_to_block_init(ConstCopyConstructorBoom<int> boom, + ConstCopyConstructorBoom<float> boom2) { + const auto& lambda1([=] { boom.foo(); }); // okay + + const auto& lambda2([=] { boom2.foo(); }); // expected-note{{in instantiation of member function}} + void (^block)(void) = lambda2; +} |

