mirror of git://gcc.gnu.org/git/gcc.git
47 lines
1.2 KiB
C
47 lines
1.2 KiB
C
// 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);
|
|
};
|