#include <iostream>
#include <string>
 
class ADDON {
    std::string s;
 
public:
    ADDON() {
        s = "";
    }
 
    ADDON(std::string in) {
        s = in;
    }
 
    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");
}