// PR c++/88548 // { dg-do compile { target c++11 } } struct S1 { int a; auto m1 () -> decltype(this->a) { return 0; } auto m2 () -> decltype(this) { return 0; } void m3 () noexcept(noexcept(this->a)) { } void m4 () noexcept(noexcept(this)) { } static auto m5 () -> decltype(this->a) { return 0; } // { dg-error ".this. may not be used in this context" } static auto m6 () -> decltype(this) { return 0; } // { dg-error ".this. may not be used in this context" } static void m7 () noexcept(noexcept(this->a)) { } // { dg-error ".this. may not be used in this context" } static void m8 () noexcept(noexcept(this)) { } // { dg-error ".this. may not be used in this context" } }; template struct S2 { static auto f1(T arg) -> decltype((arg)); }; struct S3 { int a; void f1 () noexcept(noexcept(a)) { } static void f2() noexcept(noexcept(a)) { } static auto f3() -> decltype(a); static auto f4() -> decltype((a)); }; template class S4 { T i; friend int foo(const S4 &t) noexcept(noexcept(i)) { return t.i; } }; void test () { S4 t; foo(t); } struct S5 { friend auto bar() -> decltype(this); // { dg-error ".this. may not be used in this context" } auto bar2() -> decltype(this); };