#include <iostream>
using namespace std;

// 再帰終端用のダミー関数。
void f(){}

template<typename ... ReturnTypes,typename ... ParamterTypes>
void f( int(&t)(ParamterTypes...), ReturnTypes(&...rest)(ParamterTypes ...)){
    // とりあえずtを呼び出してみる
    t(ParamterTypes()...);

    // 再帰
    f(rest...);
}


int g1(char c, long l){
    std::cout << "call g1()" << std::endl;
    return 0;
}
int g2( char c, long l ){
    std::cout << "call g2()" << std::endl;
    return 0;
}


int main() {
    f(g1,g2);
	return 0;
}