#include <iostream>
#include <string>
class ADDON {
std::string s;
public:
ADDON() {
s = "";
}
explicit ADDON(std::string in) {
s = in;
}
explicit ADDON(const char in[]) {
s = in;
}
void operator=(const std::string in) {
s = in;
}
std::string getString() {
return s;
}
};
template<typename T>
void print_to_default_file(T &obj, ADDON addon = "")
{ std::cout << "first overload\n"; }
template<typename T>
void print_to_default_file(T &obj, std::string objS) // or char* objS
{ std::cout << "second overload\n"; }
int main()
{
print_to_default_file("test","where will I go");
}
ICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KICAgICNpbmNsdWRlIDxzdHJpbmc+CiAgICAgCiAgICBjbGFzcyBBRERPTiB7CiAgICAgICAgc3RkOjpzdHJpbmcgczsKICAgICAKICAgIHB1YmxpYzoKICAgICAgICBBRERPTigpIHsKICAgICAgICAgICAgcyA9ICIiOwogICAgICAgIH0KICAgICAKICAgICAgICBleHBsaWNpdCBBRERPTihzdGQ6OnN0cmluZyBpbikgewogICAgICAgICAgICBzID0gaW47CiAgICAgICAgfQogICAgIAogICAgICAgIGV4cGxpY2l0IEFERE9OKGNvbnN0IGNoYXIgaW5bXSkgewogICAgICAgICAgICBzID0gaW47CiAgICAgICAgfQogICAgIAogICAgICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IHN0ZDo6c3RyaW5nIGluKSB7CiAgICAgICAgICAgIHMgPSBpbjsKICAgICAgICB9CiAgICAgCiAgICAgICAgc3RkOjpzdHJpbmcgZ2V0U3RyaW5nKCkgewogICAgICAgICAgICByZXR1cm4gczsKICAgICAgICB9CiAgICB9OwogICAgIAogICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgIHZvaWQgcHJpbnRfdG9fZGVmYXVsdF9maWxlKFQgJm9iaiwgQURET04gYWRkb24gPSAiIikKICAgIHsgc3RkOjpjb3V0IDw8ICJmaXJzdCBvdmVybG9hZFxuIjsgfQogICAgIAogICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgIHZvaWQgcHJpbnRfdG9fZGVmYXVsdF9maWxlKFQgJm9iaiwgc3RkOjpzdHJpbmcgIG9ialMpIC8vIG9yIGNoYXIqIG9ialMKICAgIHsgc3RkOjpjb3V0IDw8ICJzZWNvbmQgb3ZlcmxvYWRcbiI7IH0KICAgICAKICAgIGludCBtYWluKCkKICAgIHsKICAgICAgICAgcHJpbnRfdG9fZGVmYXVsdF9maWxlKCJ0ZXN0Iiwid2hlcmUgd2lsbCBJIGdvIik7CiAgICB9Cg==