111
|
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 }
|