187a03625SMalcolm Parsons // RUN: %clang_cc1 -std=c++11 %s -Wunused -Wno-unused-lambda-capture -verify 228be7c5eSDouglas Gregor 328be7c5eSDouglas Gregor 428be7c5eSDouglas Gregor struct X { 5fdf598eaSDouglas Gregor X(const X&) = delete; // expected-note 2{{explicitly marked deleted}} 628be7c5eSDouglas Gregor X(X&); 728be7c5eSDouglas Gregor }; 828be7c5eSDouglas Gregor test_capture(X x)928be7c5eSDouglas Gregorvoid test_capture(X x) { 1028be7c5eSDouglas Gregor [x] { }(); // okay: non-const copy ctor 1128be7c5eSDouglas Gregor 1228be7c5eSDouglas Gregor [x] { 13fdf598eaSDouglas Gregor [x] { // expected-error{{call to deleted constructor of 'X'}} 14fdf598eaSDouglas Gregor }(); 15fdf598eaSDouglas Gregor }(); 16fdf598eaSDouglas Gregor 17fdf598eaSDouglas Gregor [x] { 18fdf598eaSDouglas Gregor [&x] { 1928be7c5eSDouglas Gregor [x] { // expected-error{{call to deleted constructor of 'const X'}} 2028be7c5eSDouglas Gregor }(); 2128be7c5eSDouglas Gregor }(); 22fdf598eaSDouglas Gregor }(); 23812d8f63SDouglas Gregor 24812d8f63SDouglas Gregor int a; 25fdf598eaSDouglas Gregor [=] { 26fdf598eaSDouglas Gregor [&] { 27*1da9e4c9SAnastasia Stulova int &x = a; // expected-error{{binding reference of type 'int' to value of type 'const int' drops 'const' qualifier}} 28*1da9e4c9SAnastasia Stulova int &x2 = a; // expected-error{{binding reference of type 'int' to value of type 'const int' drops 'const' qualifier}} 29fdf598eaSDouglas Gregor }(); 30fdf598eaSDouglas Gregor }(); 31fdf598eaSDouglas Gregor 32fdf598eaSDouglas Gregor [=] { 33fdf598eaSDouglas Gregor [&a] { 34fdf598eaSDouglas Gregor [&] { 35*1da9e4c9SAnastasia Stulova int &x = a; // expected-error{{binding reference of type 'int' to value of type 'const int' drops 'const' qualifier}} 36*1da9e4c9SAnastasia Stulova int &x2 = a; // expected-error{{binding reference of type 'int' to value of type 'const int' drops 'const' qualifier}} 37fdf598eaSDouglas Gregor }(); 38fdf598eaSDouglas Gregor }(); 39fdf598eaSDouglas Gregor }(); 4028be7c5eSDouglas Gregor } 41