
Emil Dotchevski wrote:
What I had in mind is that foo could implement to_string or to_wstring or both, and the library would supply generic overloads of to_string/to_wstring that would kick-in as needed. So, if I give you:
std::string to_string( foo const & );
then after you include foo.hpp and presumably boost/to_string.hpp, you can say
foo x; std::wstring s=to_wstring(x);
which would bind to boost::to_wstring (since there isn't a foo overload of to_wstring) which would do the conversion using the foo to_string overload.
Hmm... No, that doesn't look very useful either. My common practice of operator<< definition is to define it as a template on the character type, like this: struct foo { template< typename CharT, typename TraitsT > friend std::basic_ostream< CharT, TraitsT >& operator<< ( std::basic_ostream< CharT, TraitsT >& strm, foo const& x); }; This allows to find the operator via ADL and have the common implementation for any character type under the same name (operator<< in this case). I would expect the same level of flexibility from the proposed library. Even more, I'd like it to use the operators if they are already defined for the class.