1 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
2 
3 struct S {
4   S *p = this; // ok
5   decltype(this) q; // expected-error {{invalid use of 'this' outside of a non-static member function}}
6 
7   int arr[sizeof(this)]; // expected-error {{invalid use of 'this' outside of a non-static member function}}
8   int sz = sizeof(this); // ok
9 
10   typedef auto f() -> decltype(this); // expected-error {{invalid use of 'this' outside of a non-static member function}}
11 };
12 
13 namespace CaptureThis {
14   struct X {
15     int n = 10;
__anon6a80c78b0102CaptureThis::X16     int m = [&]{return n + 1; }();
__anon6a80c78b0202CaptureThis::X17     int o = [&]{return this->m + 1; }();
__anon6a80c78b0302CaptureThis::X18     int p = [&]{return [&](int x) { return this->m + x;}(o); }();
19   };
20 
21   X x;
22 }
23