#include <iostream>
#include <utility>
using namespace std;

template <class T>
void PrintArgs(const T &a1){
	cout << a1 << endl;
}

template <class T, class ...ARGS>
void PrintArgs(const T &a1,const ARGS& ...args){
	cout << a1 << ",";
	PrintArgs(args...);
}

template <class F,class ...ARGS>
auto LogFunc(const char *fname,F func,ARGS &&... args)
	->decltype(func(std::forward<ARGS>(args)...)){
	cout << fname << ":";
	PrintArgs(args...);
	return func(std::forward<ARGS>(args)...);
}

#define LOG_CALL(func,...) LogFunc(#func,func,__VA_ARGS__)

void foo(int a,double b, char c){
	
}

int main() {
	
	LOG_CALL(foo,1,2.0,'c');
	
	
	return 0;
}