// RUN: %clang_cc1 -fsyntax-only -std=c++11 %s -verify template void capture(const T&); 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}} (void)[ncr] { }; // expected-error{{field of type 'NonCopyable' has private copy constructor}} } struct NonTrivial { NonTrivial(); NonTrivial(const NonTrivial &); ~NonTrivial(); }; struct CopyCtorDefault { CopyCtorDefault(); CopyCtorDefault(const CopyCtorDefault&, NonTrivial nt = NonTrivial()); void foo() const; }; void capture_with_default_args(CopyCtorDefault cct) { (void)[=] () -> void { cct.foo(); }; } struct ExpectedArrayLayout { CopyCtorDefault array[3]; }; void capture_array() { CopyCtorDefault array[3]; auto x = [=]() -> void { capture(array[0]); }; static_assert(sizeof(x) == sizeof(ExpectedArrayLayout), "layout mismatch"); } // Check for the expected non-static data members. struct ExpectedLayout { char a; short b; }; void test_layout(char a, short b) { auto x = [=] () -> void { capture(a); capture(b); }; static_assert(sizeof(x) == sizeof(ExpectedLayout), "Layout mismatch!"); }