#include <string>
#include <iostream>
template<typename T>
struct Base
{
void foo(const T&) {
std::cout << __PRETTY_FUNCTION__ << std::endl ;
}
};
template <typename ...Args>
struct Magic : public Base<Args>... { };
int main (void)
{
Magic<int, std::string> magic ;
int i = 1;
magic.foo(i) ;
std::string s="s" ;
magic.foo(s) ;
return 0 ;
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnN0cnVjdCBCYXNlCnsKICB2b2lkIGZvbyhjb25zdCBUJikgewogICAgc3RkOjpjb3V0IDw8IF9fUFJFVFRZX0ZVTkNUSU9OX18gPDwgc3RkOjplbmRsIDsKICB9Cgp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIC4uLkFyZ3M+CnN0cnVjdCBNYWdpYyA6IHB1YmxpYyBCYXNlPEFyZ3M+Li4uIHsgfTsKCmludCBtYWluICh2b2lkKQp7CiAgTWFnaWM8aW50LCBzdGQ6OnN0cmluZz4gbWFnaWMgOwoKICBpbnQgaSA9IDE7CiAgbWFnaWMuZm9vKGkpIDsKICBzdGQ6OnN0cmluZyBzPSJzIiA7CiAgbWFnaWMuZm9vKHMpIDsKCiAgcmV0dXJuIDAgOwoKfQo=