// PR c++/54359
// { dg-require-effective-target c++11 }
int& ref(int& x) { return x; }
const int& ref(const int& x) { return x; }
class A {
    int x;
    int f() const;
    auto test1() const -> decltype(this);
    auto test2() const -> decltype(ref(x));
    auto test3() const -> decltype(f());
};
auto A::test1() const -> decltype(this) {
    return this;
}
auto A::test2() const -> decltype(ref(x)) {
    return ref(x);
}
auto A::test3() const -> decltype(f()) {
    return f();
}