#include <string>
#include <cstdio>
void set(const char *s1, const char *s2, const char *s3)
{
/// Common implementation
std::printf("s1: %s, s2: %s, s3: %s\n", s1, s2, s3);
}
const char *conv(const char *s)
{
return s;
}
const char *conv(const std::string &s)
{
return s.c_str();
}
template<typename T1, typename T2, typename T3>
void set(const T1 &s1, const T2 &s2, const T3 &s3)
{
set(conv(s1), conv(s2), conv(s3));
}
int main()
{
std::string s1 = "sss111";
std::string s2 = "TWO";
const char * s3 = "III help";
set(s1, s2, s3);
set("Hello!", s3, s1);
return 0;
}
I2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGNzdGRpbz4KCnZvaWQgc2V0KGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgY29uc3QgY2hhciAqczMpCnsKICAgIC8vLyBDb21tb24gaW1wbGVtZW50YXRpb24KICAgIHN0ZDo6cHJpbnRmKCJzMTogJXMsIHMyOiAlcywgczM6ICVzXG4iLCBzMSwgczIsIHMzKTsKfQoKY29uc3QgY2hhciAqY29udihjb25zdCBjaGFyICpzKQp7CiAgICByZXR1cm4gczsKfQpjb25zdCBjaGFyICpjb252KGNvbnN0IHN0ZDo6c3RyaW5nICZzKQp7CiAgICByZXR1cm4gcy5jX3N0cigpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzPgp2b2lkIHNldChjb25zdCBUMSAmczEsIGNvbnN0IFQyICZzMiwgY29uc3QgVDMgJnMzKQp7CiAgICBzZXQoY29udihzMSksIGNvbnYoczIpLCBjb252KHMzKSk7Cn0KCmludCBtYWluKCkKewogICAgc3RkOjpzdHJpbmcgczEgPSAic3NzMTExIjsKICAgIHN0ZDo6c3RyaW5nIHMyID0gIlRXTyI7CiAgICBjb25zdCBjaGFyICogczMgPSAiSUlJIGhlbHAiOwoKICAgIHNldChzMSwgczIsIHMzKTsKICAgIHNldCgiSGVsbG8hIiwgczMsIHMxKTsKICAgIHJldHVybiAwOwp9Cg==