#include <iostream>
#include <string>
#include <sstream>
template<typename T>
struct Test {
T value;
Test(std::string);
};
template<>
inline Test<std::string>::Test(std::string str) {
value = str;
}
template<typename T>
inline Test<T>::Test(std::string str) {
std::stringstream ss;
ss.str(str);
ss >> value;
}
int main() {
Test<int> t1{"42"};
Test<double> t2{"3.14159"};
Test<std::string> t3{"Hello world"};
std::cout
<< t1.value << std::endl
<< t2.value << std::endl
<< t3.value << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8c3N0cmVhbT4KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnN0cnVjdCBUZXN0IHsKCVQgdmFsdWU7CglUZXN0KHN0ZDo6c3RyaW5nKTsKfTsKCnRlbXBsYXRlPD4KaW5saW5lIFRlc3Q8c3RkOjpzdHJpbmc+OjpUZXN0KHN0ZDo6c3RyaW5nIHN0cikgewoJdmFsdWUgPSBzdHI7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CmlubGluZSBUZXN0PFQ+OjpUZXN0KHN0ZDo6c3RyaW5nIHN0cikgewoJc3RkOjpzdHJpbmdzdHJlYW0gc3M7Cglzcy5zdHIoc3RyKTsKCXNzID4+IHZhbHVlOwp9CgppbnQgbWFpbigpIHsKCVRlc3Q8aW50PiB0MXsiNDIifTsKCVRlc3Q8ZG91YmxlPiB0MnsiMy4xNDE1OSJ9OwoJVGVzdDxzdGQ6OnN0cmluZz4gdDN7IkhlbGxvIHdvcmxkIn07CgoJc3RkOjpjb3V0CgkJPDwgdDEudmFsdWUgPDwgc3RkOjplbmRsCgkJPDwgdDIudmFsdWUgPDwgc3RkOjplbmRsCgkJPDwgdDMudmFsdWUgPDwgc3RkOjplbmRsOwoKCXJldHVybiAwOwp9Cg==