#include <iostream>
#include <string>
#include <typeinfo>
template<typename T1, typename T2>
auto sum(const T1& t1, const T2& t2) {
return t1 + t2;
}
template<typename T1, typename... T2>
auto sum(const T1& t1, const T2&... t2) {
return t1 + sum(t2...);
}
int main(int argc, char** argv) {
auto s1 = sum(1, 2, 3);
std::cout << typeid(s1).name() << " " << s1 << std::endl;
auto s2 = sum(1, 2.0, 3);
std::cout << typeid(s2).name() << " " << s2 << std::endl;
auto s3 = sum("Hello", " ", std::string("World!"));
std::cout << typeid(s3).name() << " " << s3 << std::endl;
auto s4 = sum("Hello", " ", "World!"s);
std::cout << typeid(s4).name() << " " << s4 << std::endl;
return 0;
}
CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHR5cGVpbmZvPgoKdGVtcGxhdGU8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgphdXRvIHN1bShjb25zdCBUMSYgdDEsIGNvbnN0IFQyJiB0MikgewogICAgcmV0dXJuIHQxICsgdDI7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZS4uLiBUMj4KYXV0byBzdW0oY29uc3QgVDEmIHQxLCBjb25zdCBUMiYuLi4gdDIpIHsKICAgIHJldHVybiB0MSArIHN1bSh0Mi4uLik7Cn0KCmludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikgewogICAgYXV0byBzMSA9IHN1bSgxLCAyLCAzKTsKICAgIHN0ZDo6Y291dCA8PCB0eXBlaWQoczEpLm5hbWUoKSA8PCAiICIgPDwgczEgPDwgc3RkOjplbmRsOwoKICAgIGF1dG8gczIgPSBzdW0oMSwgMi4wLCAzKTsKICAgIHN0ZDo6Y291dCA8PCB0eXBlaWQoczIpLm5hbWUoKSA8PCAiICIgPDwgczIgPDwgc3RkOjplbmRsOwoKICAgIGF1dG8gczMgPSBzdW0oIkhlbGxvIiwgIiAiLCBzdGQ6OnN0cmluZygiV29ybGQhIikpOwogICAgc3RkOjpjb3V0IDw8IHR5cGVpZChzMykubmFtZSgpIDw8ICIgIiA8PCBzMyA8PCBzdGQ6OmVuZGw7CgogICAgYXV0byBzNCA9IHN1bSgiSGVsbG8iLCAiICIsICJXb3JsZCEicyk7CiAgICBzdGQ6OmNvdXQgPDwgdHlwZWlkKHM0KS5uYW1lKCkgPDwgIiAiIDw8IHM0IDw8IHN0ZDo6ZW5kbDsKCiAgICByZXR1cm4gMDsKfQo=
prog.cpp: In function 'int main(int, char**)':
prog.cpp:26:33: error: unable to find string literal operator 'operator""s'
auto s4 = sum("Hello", " ", "World!"s);
^