1 // RUN: %clang_cc1 -fsyntax-only -std=c++11 %s -verify
3 template<typename T
> void capture(const T
&);
6 NonCopyable(const NonCopyable
&); // expected-note 2 {{implicitly declared private here}}
13 NonConstCopy(NonConstCopy
&); // expected-note{{would lose const}}
16 void capture_by_copy(NonCopyable nc
, NonCopyable
&ncr
, const NonConstCopy nco
) {
17 (void)[nc
] { }; // expected-error{{capture of variable 'nc' as type 'NonCopyable' calls private copy constructor}}
18 (void)[=] { // expected-error{{capture of variable 'ncr' as type 'NonCopyable' calls private copy constructor}}
22 [nco
] {}(); // expected-error{{no matching constructor for initialization of 'const NonConstCopy'}}
27 NonTrivial(const NonTrivial
&);
31 struct CopyCtorDefault
{
33 CopyCtorDefault(const CopyCtorDefault
&, NonTrivial nt
= NonTrivial());
38 void capture_with_default_args(CopyCtorDefault cct
) {
39 (void)[=] () -> void { cct
.foo(); };
42 struct ExpectedArrayLayout
{
43 CopyCtorDefault array
[3];
46 void capture_array() {
47 CopyCtorDefault array
[3];
48 auto x
= [=]() -> void {
51 static_assert(sizeof(x
) == sizeof(ExpectedArrayLayout
), "layout mismatch");
54 // Check for the expected non-static data members.
56 struct ExpectedLayout
{
61 void test_layout(char a
, short b
) {
62 auto x
= [=] () -> void {
66 static_assert(sizeof(x
) == sizeof(ExpectedLayout
), "Layout mismatch!");
69 struct ExpectedThisLayout
{
70 ExpectedThisLayout
* a
;
72 auto x
= [this]() -> void {};
73 static_assert(sizeof(x
) == sizeof(ExpectedThisLayout
), "Layout mismatch!");
77 struct CaptureArrayAndThis
{
84 for (unsigned i
= 0; i
< 3; ++i
)
91 namespace rdar14468891
{
94 virtual ~X() = 0; // expected-note{{unimplemented pure virtual method '~X' in 'X'}}
97 class Y
: public X
{ };
100 [x
]() {}(); // expected-error{{by-copy capture of value of abstract type 'X'}}
104 namespace rdar15560464
{
105 struct X
; // expected-note{{forward declaration of 'rdar15560464::X'}}
106 void foo(const X
& param
) {
108 auto& y
= param
; // expected-error{{by-copy capture of variable 'param' with incomplete type 'const X'}}