copy_string( InputIterator first, InputIterator last, OutputIterator result )
copy_string( InputIterator& first, const InputIterator& last, OutputIterator& result )
copy_string( InputIterator first, InputIterator last, OutputIterator result )  {    typedef nsCharSourceTraits<InputIterator> source_traits;    typedef nsCharSinkTraits<OutputIterator>  sink_traits;    while ( first != last )      {        PRInt32 count_copied = PRInt32(sink_traits::write(result, source_traits::read(first), source_traits::readable_distance(first, last)));        NS_ASSERTION(count_copied > 0, "|copy_string| will never terminate");        first += count_copied;      }    return result;  }