// 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; }