Listing 4

template<typename Rep>
class concat_string
{
   private:
      Rep data_;
   private:
      concat_string();
      concat_string &operator=(concat_string const &);
   public:
      typedef Rep value_type;
      concat_string(Rep const &data) : data_(data){ }
      Rep const &data() const { return data_; }
      template<typename C, typename T, typename A>
      operator std::basic_string<C, T, A>() const
      {
         std::basic_string<C, T, A> data;
         data.reserve(length(data_));
         appender<std::basic_string<C, T, A> > append(data);
         append(data_);
         return data;
      }
};