1 // PR c++/43868 2 // { dg-options "-g" } 3 4 struct Foo 5 { 6 virtual void do_something() = 0; 7 }; 8 9 template <typename T> 10 struct Foo_impl; 11 12 template <typename R, typename O> 13 struct Foo_impl<R (O::*)() const> : public Foo 14 { 15 struct Helper 16 { 17 typedef int Some_type; 18 operator Some_type () const { return 0; } 19 Helper( R (O::*)() const) {} 20 }; 21 22 void do_something() { Helper( 0); }; 23 }; 24 25 void register_foo_internal( Foo*) {}; 26 27 template <typename TT> 28 void register_foo( TT) { register_foo_internal( new Foo_impl<TT>()); } 29 30 struct Bar 31 { 32 }; 33 34 void setup() 35 { 36 register_foo( (int (Bar::*) () const) 0); 37 } 38