// PR c++/26714 | |
// { dg-do run } | |
extern "C" void abort(); | |
bool ok = false; | |
struct A { | |
A() { } | |
~A() { if (!ok) abort(); } | |
}; | |
struct B { | |
static A foo() { return A(); } | |
}; | |
B b_g; | |
struct scoped_ptr { | |
B* operator->() const { return &b_g; } | |
B* get() const { return &b_g; } | |
}; | |
B *get() { return &b_g; } | |
int main() | |
{ | |
scoped_ptr f; | |
const A& ref1 = f->foo(); | |
const A& ref2 = f.get()->foo(); | |
const A& ref3 = get()->foo(); | |
const A& ref4 = B::foo(); | |
B *pf = f.get(); | |
const A& ref5 = pf->foo(); | |
ok = true; | |
} |