Subject: Re: [boost] Formal Review Request: Boost.String.Convert
From: Andrey Semashev (andrey.semashev_at_[hidden])
Date: 2009-02-18 16:03:41


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.