+// Forward definitions do not work with libc++
+// For gcc5 with the new std::string ABI forward declarations would work in
+// principle, but I am not sure whether we want non-standard
+// "namespace __cxx11" in our sources.
+#if defined(USE_LLVM_LIBCPP) || defined(USE_GLIBCXX_CXX11_ABI)
+#include <string>
+#else
+
+namespace std {
+
+template<typename Alloc> class allocator;
+
+template<typename Char> struct char_traits;
+template<> struct char_traits<char>;
+#ifdef USE_WCHAR_T
+template<> struct char_traits<wchar_t>;
+#endif
+
+template<typename Char, typename Traits, typename Alloc> class basic_string;
+typedef basic_string<char, char_traits<char>, allocator<char> > string;
+
+template<class Char, class Traits> class basic_istream;
+template<class Char, class Traits> class basic_ostream;
+template<class Char, class Traits, class Allocator> class basic_ostringstream;
+
+typedef basic_istream<char, char_traits<char> > istream;
+typedef basic_ostream<char, char_traits<char> > ostream;
+typedef basic_ostringstream<char, char_traits<char>, allocator<char> > ostringstream;
+
+} // namespace std
+
+#endif
+
+
+
+