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;
}