Change
template < typename T ( *function )( A ) >
to
template < T ( *function )( A... ) >
I would also change:
{ T operator()( A... arguments ) { return function( arguments ); }
to
{
template<typename...Ts>
T operator()( Ts&&... arguments ) const {
return function( std::forward<Ts>(arguments)... );
}
for efficiency sake. Then again I am unsure of the point of any of this.