    #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");
    }
