1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #include <iostream> #define CALL_MEMBER_FN(object,ptrToMember) ((object).*(ptrToMember)) class Foo { public: typedef void (Foo::*FFunc)( int i ); void test( FFunc f ) { CALL_MEMBER_FN(*this,f)( 123 ); } void barf1( int i ) { std::cout << " barf1" << std::endl; } ; }; class Bar : public Foo { public: void barf2( int i ) { std::cout << " barf2" << std::endl; } ; }; void ffff() { Foo f; f.test( &Foo::barf1 ); // works Bar b; b.test( &Bar::barf1 ); // works b.test( ( Foo::FFunc )&Bar::barf2 ); // ERROR } int main( void ) { ffff(); return ( 0 ); } |
I2luY2x1ZGUgPGlvc3RyZWFtPgojZGVmaW5lIENBTExfTUVNQkVSX0ZOKG9iamVjdCxwdHJUb01lbWJlcikgICgob2JqZWN0KS4qKHB0clRvTWVtYmVyKSkKCmNsYXNzIEZvbwp7CiBwdWJsaWM6CiAgdHlwZWRlZiB2b2lkIChGb286OipGRnVuYykoIGludCBpICk7CgogIHZvaWQgdGVzdCggRkZ1bmMgZiApCiAgewogICBDQUxMX01FTUJFUl9GTigqdGhpcyxmKSggMTIzICk7CiAgfQoKICB2b2lkIGJhcmYxKCBpbnQgaSApCiAgewogICBzdGQ6OmNvdXQgPDwgIiBiYXJmMSIgPDwgc3RkOjplbmRsOwogIH0KICA7Cn07CgpjbGFzcyBCYXIgOiBwdWJsaWMgRm9vCnsKIHB1YmxpYzoKICB2b2lkIGJhcmYyKCBpbnQgaSApCiAgewogICBzdGQ6OmNvdXQgPDwgIiBiYXJmMiIgPDwgc3RkOjplbmRsOwogIH0KICA7Cn07Cgp2b2lkIGZmZmYoKQp7CiBGb28gZjsKIGYudGVzdCggJkZvbzo6YmFyZjEgKTsgLy8gd29ya3MKCiBCYXIgYjsKIGIudGVzdCggJkJhcjo6YmFyZjEgKTsgLy8gd29ya3MKIGIudGVzdCggKCBGb286OkZGdW5jICkmQmFyOjpiYXJmMiApOyAvLyBFUlJPUgp9CgppbnQgbWFpbiggdm9pZCApCnsKIGZmZmYoKTsKCiByZXR1cm4gKCAwICk7Cn0=
-
upload with new input
-
result: Success time: 0s memory: 2828 kB returned value: 0
barf1 barf1 barf2


