+
+template bool operator==(trivial_string<char> const &,
+ trivial_string<char> const &);
+template bool operator==(trivial_string<char_type> const &,
+ trivial_string<char_type> const &);
+template <typename Char>
+bool operator==(trivial_string<Char> const & lhs, trivial_string<Char> const & rhs)
+{
+ return lhs.compare(rhs) == 0;
+}
+
+
+template bool operator==(trivial_string<char> const &, char const *);
+template bool operator==(trivial_string<char_type> const &, char_type const *);
+template <typename Char>
+bool operator==(trivial_string<Char> const & lhs, Char const * rhs)
+{
+ return lhs.compare(trivial_string<Char>(rhs)) == 0;
+}
+
+
+template bool operator==(char const *, trivial_string<char> const &);
+template bool operator==(char_type const *, trivial_string<char_type> const &);
+template <typename Char>
+bool operator==(Char const * lhs, trivial_string<Char> const & rhs)
+{
+ return rhs.compare(trivial_string<Char>(lhs)) == 0;
+}
+
+
+template ostream & operator<<(ostream &, trivial_string<char> const &);
+template odocstream & operator<<(odocstream &, trivial_string<char_type> const &);
+template <typename Char>
+basic_ostream<Char, char_traits<Char> > &
+operator<<(basic_ostream<Char, char_traits<Char> > & os, trivial_string<Char> const & s)
+{
+ return os << basic_string<Char, char_traits<Char>, allocator<Char> >(s);
+}
+