#include <iostream>
using namespace std;
void foo() { cout << "foo" << endl; }
void bar(char, short, int) { cout <<"bar" << endl; }
#define DEFINE_FUNCTION_WRAPPER(return_type, name, ...)\
return_type name##_wrapper(/* macro expansion */)\
{\
return name(/* macro expansion */);\
}\
DEFINE_FUNCTION_WRAPPER(void, foo) // works!
//DEFINE_FUNCTION_WRAPPER(void, foo, char, short, int) // knowledge insufficient
int main() {
foo_wrapper();
//bar_wrapper();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgZm9vKCkgeyBjb3V0IDw8ICJmb28iIDw8IGVuZGw7IH0Kdm9pZCBiYXIoY2hhciwgc2hvcnQsIGludCkgeyBjb3V0IDw8ImJhciIgPDwgZW5kbDsgfQoKI2RlZmluZSBERUZJTkVfRlVOQ1RJT05fV1JBUFBFUihyZXR1cm5fdHlwZSwgbmFtZSwgLi4uKVwKcmV0dXJuX3R5cGUgbmFtZSMjX3dyYXBwZXIoLyogbWFjcm8gZXhwYW5zaW9uICovKVwKe1wKICAgIHJldHVybiBuYW1lKC8qIG1hY3JvIGV4cGFuc2lvbiAqLyk7XAp9XAoKREVGSU5FX0ZVTkNUSU9OX1dSQVBQRVIodm9pZCwgZm9vKQkvLyB3b3JrcyEKLy9ERUZJTkVfRlVOQ1RJT05fV1JBUFBFUih2b2lkLCBmb28sIGNoYXIsIHNob3J0LCBpbnQpCS8vIGtub3dsZWRnZSBpbnN1ZmZpY2llbnQKCmludCBtYWluKCkgewoJZm9vX3dyYXBwZXIoKTsKCS8vYmFyX3dyYXBwZXIoKTsKfQ==