#include <iostream>
using namespace std;
#define GEN_MESSAGE_INVOKER(FuncName) \
class\
{ \
public: \
template <class C> \
static void Invoke (C &item, decltype (C::FuncName)) \
{ \
item.FuncName (); \
} \
\
template <class C> \
static void Invoke (C &item, ...) \
{} \
}
class A
{
void OnDerp ( )
{
cout << "Derpin!" << endl;
}
} ;
class B
{
} ;
template < class I>
void InvokeMessage ( )
{
A a;
B b;
I:: Invoke ( a,0 ) ; //0 goes to either ... or the decltype pointer param.
I:: Invoke ( b,0 ) ;
}
int main( )
{
InvokeMessage < GEN_MESSAGE_INVOKER( OnDerp) > ( ) ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBHRU5fTUVTU0FHRV9JTlZPS0VSKEZ1bmNOYW1lKSBcCiAgICAgICAgY2xhc3NcCiAgICAgICAgeyBcCiAgICAgICAgcHVibGljOiBcCiAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQz4gXAogICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgSW52b2tlIChDICZpdGVtLCBkZWNsdHlwZSAoQzo6RnVuY05hbWUpKSBcCiAgICAgICAgICAgICAgICB7IFwKICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5GdW5jTmFtZSAoKTsgXAogICAgICAgICAgICAgICAgfSBcCiAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgdGVtcGxhdGUgPGNsYXNzIEM+IFwKICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIEludm9rZSAoQyAmaXRlbSwgLi4uKSBcCiAgICAgICAgICAgICAgICB7fSBcCiAgICAgICAgfSAKCgpjbGFzcyBBCnsKICAgICAgICB2b2lkIE9uRGVycCAoKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGNvdXQgPDwgIkRlcnBpbiEiIDw8IGVuZGw7CiAgICAgICAgfQp9OwogCmNsYXNzIEIKewp9OwoKdGVtcGxhdGUgPGNsYXNzIEk+CnZvaWQgSW52b2tlTWVzc2FnZSAoKQp7CglBIGE7CglCIGI7CiAgICAgICAgSTo6SW52b2tlIChhLDApOyAvLzAgZ29lcyB0byBlaXRoZXIgLi4uIG9yIHRoZSBkZWNsdHlwZSBwb2ludGVyIHBhcmFtLgogICAgICAgIEk6Okludm9rZSAoYiwwKTsKfQoKaW50IG1haW4oKSAKewoJSW52b2tlTWVzc2FnZSA8R0VOX01FU1NBR0VfSU5WT0tFUihPbkRlcnApPigpOwoJcmV0dXJuIDA7Cn0=
compilation info
prog.cpp: In function 'int main()':
prog.cpp:43:17: error: invalid declaration of member template in local class
prog.cpp:43:17: error: invalid declaration of member template in local class
prog.cpp:43:45: error: expected class-name before '(' token
prog.cpp:43:45: error: expected '::' before '(' token
prog.cpp:43:45: error: expected identifier before '(' token
prog.cpp:43:46: error: expected unqualified-id before ')' token
stdout