Listing 3
template< . . . > size_t fast_string_concatenator<S, C, T>::length() const { return m_lhs.length() + m_rhs.length(); } template< . . . > size_t fast_string_concatenator<S, C, T>::Data::length() const { size_t len; assert( type == cstring || type == single || type == concat || type == seed); switch(type) { case seed: len = 0; break; case single: len = 1; break; case cstring: len = ref.cstring.len; break; case concat: len = ref.concat->length(); break; } return len; }