1 // RUN: %clang_cc1 -fsyntax-only -std=c++1z %s -verify
2 
3 class NonCopyable {
4   NonCopyable(const NonCopyable&) = delete; //expected-note3{{explicitly marked deleted here}}
5   int x = 10;
foo()6   void foo() {
7     auto L = [this] { return x; };
8     const auto &M = [*this] { return x; };//expected-error{{call to deleted}}
9     const auto &M2 = [this] () -> auto&& {
10       ++x;
11       return [*this] {  //expected-error{{call to deleted}} expected-warning{{reference to local}}
12          return ++x; //expected-error{{read-only}}
13       };
14     };
15     const auto &M3 = [*this] () mutable -> auto&& { //expected-error{{call to deleted}}
16       ++x;
17       return [this] {  // expected-warning{{reference to local}}
18          return x;
19       };
20     };
21   }
22 };
23