1 // PR c++/26714 2 // { dg-do run } 3 4 extern "C" void abort(); 5 6 bool ok = false; 7 struct A { AA8 A() { } ~AA9 ~A() { if (!ok) abort(); } 10 }; 11 12 struct B { fooB13 static A foo() { return A(); } 14 }; 15 16 B b_g; 17 18 struct scoped_ptr { 19 B* operator->() const { return &b_g; } getscoped_ptr20 B* get() const { return &b_g; } 21 }; 22 get()23B *get() { return &b_g; } 24 main()25int main() 26 { 27 scoped_ptr f; 28 const A& ref1 = f->foo(); 29 const A& ref2 = f.get()->foo(); 30 const A& ref3 = get()->foo(); 31 const A& ref4 = B::foo(); 32 B *pf = f.get(); 33 const A& ref5 = pf->foo(); 34 35 36 ok = true; 37 } 38