diff options
Diffstat (limited to 'gcc/testsuite/g++.old-deja/g++.mike/pmf2.C')
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.mike/pmf2.C | 55 |
1 files changed, 1 insertions, 54 deletions
diff --git a/gcc/testsuite/g++.old-deja/g++.mike/pmf2.C b/gcc/testsuite/g++.old-deja/g++.mike/pmf2.C index 2f1bec51e95..b3b753c1a91 100644 --- a/gcc/testsuite/g++.old-deja/g++.mike/pmf2.C +++ b/gcc/testsuite/g++.old-deja/g++.mike/pmf2.C @@ -1,54 +1 @@ -extern "C" int printf(const char *, ...); - -class A_table { - int c; -public: - A_table() { c = 3;} - virtual void func2(int &item) { printf("func2(%d,) c=%d\n",item,c);} -}; - -class B_table : private A_table { - typedef void (B_table::* B_ti_fn) (int &item); -public: - B_table() { j = 0x4321;} - virtual void call_fn_fn1(int &item, void *pfn1); - void func1(int &item) { printf("func1(%d)\n",item);} - virtual void func2(int &item) { printf("func2(%d) j=%d\n",item,j);} - int j; -}; - -class foo : public A_table { -public: - int i; - virtual ~foo(); - virtual void func2(int &item) { printf("func2(%d) i=%d\n",item,i);} -}; -foo::~foo() { i = 0;} - -class bar :public foo,public B_table { -public: - int w; - virtual ~bar(); - virtual void func2(int &item) { printf("func2(%d) w=%d\n",item,w);} -}; -bar::~bar() { w = 0;} - -void B_table::call_fn_fn1(int &item, void *pfn1) { - (this->*(*(B_ti_fn*)pfn1))(item); -} - -B_table b; -bar jar; - -main() { - printf("ptr to B_table=%x, ptr to A_table=%x\n",&b,(A_table*)&b); - B_table::B_ti_fn z = &B_table::func1; - int j = 1; - jar.call_fn_fn1(j,(void *)&z); - j++; - z = &B_table::func2; - b.call_fn_fn1(j,(void *)&z); - j++; - jar.call_fn_fn1(j,(void *)&z); - return 0; -} +int main() { |