トリッキーかどうかはわからないけど、
int ( int, int ) のような関数型を受け取って、引数タイプリストを返すもの。
タイプリストは、Loki のやつ。

template< typename R > struct RaramList { typedef Loki::NullType Result; };
template< typename R, typename P1 >
struct ParamList< R ( P1 ) > { typedef TYPELIST_1( P1 ) Result; };
template< typename R, typename P1, typename P2 >
struct ParamList< R ( P1, P2 ) >
{ typedef TYPELIST_2( P1, P2 ) Result; };
....
と、必要な分だけ特殊化させておく。そうすると、

ParamList< string >::Result; // NullType
ParamList< void ( int, int ) >::Result; // TYPELIST_2( int, int )
ParamList< int ( char*, int, int ) >::Result; // TYPELIST_3( char*, int, int )

で、引数リストが完成。
これを利用して、Loki の Functor を書き換えると、
Loki::Functor< int, TYPELIST_1( char*, int ) > と、
Loki::Functor< int ( char*, int ) > で同じ動きをさせることも出来る。