Función sobrecargada como argumento de la función de plantilla variadic

Estoy tratando de hacer una función de plantilla variable, que toma como argumentos la función sobrecargada y sus argumentos:)

int sumall(int a) { return a; }
int sumall(int a, int b) { return a+b; }

template<typename R, typename... A>
R doit( R(*f)(A...), A... a) {
    return f(a...); }

Quiero llamardoit sin ningún especificador de plantilla ni conversión:

cout << doit(sumall, 7, 6) << endl

Eso no se compila, pero cuando los tipos de retorno son nulos, todo funciona perfectamente:

void printsum(int a) { cout << a << endl; }
void printsum(int a, int b) { cout << a+b << endl; }

template<typename... A>
void vdoit( void(*f)(A...), A... a) {
    f(a...); }

// ...
vdoit(printsum, 7, 6);

¿Es posible modificar la primera plantilla para trabajar solo con modyfing?doit plantilla (quiero preservarsumall funciones ydoit llamada)? Creo que se puede hacer eliminandotypename R y dejando solotemplate<typename... A> ya queR depende deA... yf, pero no tengo idea de cómo mostrar esa dependencia.

Respuestas a la pregunta(4)

Su respuesta a la pregunta