blob: 486e0450f4a3cba55cc7ba98b6db978a1b270493 [file] [log] [blame]
// 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 <typename T>
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<typename T>
class S4 {
T i;
friend int foo(const S4 &t) noexcept(noexcept(i)) { return t.i; }
};
void
test ()
{
S4<int> t;
foo(t);
}
struct S5 {
friend auto bar() -> decltype(this); // { dg-error ".this. may not be used in this context" }
auto bar2() -> decltype(this);
};