#include <iostream>
#include <string>
template<typename A1, typename A2>
struct printer
{
void print(A1 const& a1, A2 const& a2)
{
std::cout << a1 << " " << a2 << "\n";
}
void print(void** args)
{
print(*static_cast<A1*>(args[0]), *static_cast<A2*>(args[1]));
}
};
int main()
{
printer<std::string, int> my_printer;
my_printer.print("Test", 1);
std::string a1 = "Test";
int a2 = 2;
void* args[] = { &a1, &a2 };
my_printer.print(args);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKdGVtcGxhdGU8dHlwZW5hbWUgQTEsIHR5cGVuYW1lIEEyPgpzdHJ1Y3QgcHJpbnRlcgp7CiAgICB2b2lkIHByaW50KEExIGNvbnN0JiBhMSwgQTIgY29uc3QmIGEyKQogICAgewogICAgICAgc3RkOjpjb3V0IDw8IGExIDw8ICIgIiA8PCBhMiA8PCAiXG4iOwogICAgfQoKICAgIHZvaWQgcHJpbnQodm9pZCoqIGFyZ3MpCiAgICB7CiAgICAgICAgcHJpbnQoKnN0YXRpY19jYXN0PEExKj4oYXJnc1swXSksICpzdGF0aWNfY2FzdDxBMio+KGFyZ3NbMV0pKTsKICAgIH0KfTsKCmludCBtYWluKCkKewogICAgcHJpbnRlcjxzdGQ6OnN0cmluZywgaW50PiBteV9wcmludGVyOwogICAgbXlfcHJpbnRlci5wcmludCgiVGVzdCIsIDEpOwoKICAgIHN0ZDo6c3RyaW5nIGExID0gIlRlc3QiOwogICAgaW50IGEyID0gMjsKICAgIHZvaWQqIGFyZ3NbXSA9IHsgJmExLCAmYTIgfTsKICAgIG15X3ByaW50ZXIucHJpbnQoYXJncyk7Cn0=