#include <iostream>
static void printHelper()
{
}
template <typename T>
static void printHelper(T&& arg)
{
std::cout << arg;
}
template<typename T, typename ...Args>
static void printHelper(T&& arg, Args&& ...args)
{
std::cout << arg << ", ";
printHelper(args...);
}
class Factory
{
public:
template<typename ...Args>
static void testFunc(Args&& ...args)
{
std::cout << "inside function; args are: ";
printHelper(args...);
std::cout << std::endl;
}
};
int main()
{
void (*pFunc1)() = &Factory::testFunc<>;
pFunc1();
void (*pFunc2)(int&&, char&&, double&&) = &Factory::testFunc<int, char, double>;
pFunc2(1, 'a', 3.14);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RhdGljIHZvaWQgcHJpbnRIZWxwZXIoKQp7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpzdGF0aWMgdm9pZCBwcmludEhlbHBlcihUJiYgYXJnKQp7CiAgICBzdGQ6OmNvdXQgPDwgYXJnOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSAuLi5BcmdzPgpzdGF0aWMgdm9pZCBwcmludEhlbHBlcihUJiYgYXJnLCBBcmdzJiYgLi4uYXJncykKewogICAgc3RkOjpjb3V0IDw8IGFyZyA8PCAiLCAiOwogICAgcHJpbnRIZWxwZXIoYXJncy4uLik7Cn0KCmNsYXNzIEZhY3RvcnkKewpwdWJsaWM6CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi5BcmdzPgogICAgc3RhdGljIHZvaWQgdGVzdEZ1bmMoQXJncyYmIC4uLmFyZ3MpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJpbnNpZGUgZnVuY3Rpb247IGFyZ3MgYXJlOiAiOwogICAgICAgIHByaW50SGVscGVyKGFyZ3MuLi4pOwogICAgICAgIHN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7CiAgICB9Cn07CgppbnQgbWFpbigpCnsKICAgIHZvaWQgKCpwRnVuYzEpKCkgPSAmRmFjdG9yeTo6dGVzdEZ1bmM8PjsKICAgIHBGdW5jMSgpOwogICAgCiAgICB2b2lkICgqcEZ1bmMyKShpbnQmJiwgY2hhciYmLCBkb3VibGUmJikgPSAmRmFjdG9yeTo6dGVzdEZ1bmM8aW50LCBjaGFyLCBkb3VibGU+OwogICAgcEZ1bmMyKDEsICdhJywgMy4xNCk7Cn0=