The problem is that std::string is a specialisation of a template, std::basic_string, and the required overload of operator<< is itself a template:
template
basic_ostream&
operator<<(basic_ostream&& os,
const basic_string& str);
In order to be used for template argument deduction, a user-defined type has to be an exact match; conversions are not considered.
You will need to either provide an overload of operator<< for your class, or explicitly convert to std::string.