#include <iostream>
template<class T>
class Wrapper
{
public:
Wrapper(T t) : t_(t)
{}
private:
T t_;
};
template<class... Args>
void g(Args&&...)
{
std::cout << __PRETTY_FUNCTION__ << '\n';
}
template<class... Args>
void f(Args&&... args)
{
std::cout << __PRETTY_FUNCTION__ << '\n';
g(std::forward<Wrapper<Args>>(args)...);
}
int main()
{
f(1, 2.0, "three");
}
ICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KICAgIAogICAgdGVtcGxhdGU8Y2xhc3MgVD4KICAgIGNsYXNzIFdyYXBwZXIKICAgIHsKICAgIHB1YmxpYzoKICAgICAgICBXcmFwcGVyKFQgdCkgOiB0Xyh0KQogICAgICAgIHt9CiAgICBwcml2YXRlOgogICAgICAgIFQgdF87CiAgICB9OwogICAgCiAgICB0ZW1wbGF0ZTxjbGFzcy4uLiBBcmdzPgogICAgdm9pZCBnKEFyZ3MmJi4uLikKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgX19QUkVUVFlfRlVOQ1RJT05fXyA8PCAnXG4nOwogICAgfQogICAgCiAgICB0ZW1wbGF0ZTxjbGFzcy4uLiBBcmdzPgogICAgdm9pZCBmKEFyZ3MmJi4uLiBhcmdzKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCBfX1BSRVRUWV9GVU5DVElPTl9fIDw8ICdcbic7CiAgICAgICAgZyhzdGQ6OmZvcndhcmQ8V3JhcHBlcjxBcmdzPj4oYXJncykuLi4pOwogICAgfQogICAgCiAgICBpbnQgbWFpbigpCiAgICB7CiAgICAgICAgZigxLCAyLjAsICJ0aHJlZSIpOwogICAgfQ==