]> git.lyx.org Git - lyx.git/blobdiff - src/support/strfwd.h
Fix Lexer::getLongString prefix pruning logic
[lyx.git] / src / support / strfwd.h
index 10411cda229f86cd7b3270693a50f082783a2abb..c7e9c55517d6eb4726244274cdbb0b79503bc9b5 100644 (file)
 #ifndef STRFWD_H
 #define STRFWD_H
 
-// This includes does nothing but defining _LIBCPP_VERSION
-// if libc++ is used (rather than libstdc++) - we first
-// check if we have at least a c++03 standard before
-// including the file
-#if (__cplusplus > 199711L)
-#include <ciso646>
-#endif
-
 #ifdef USE_WCHAR_T
 
 // Prefer this if possible because GNU libstdc++ has usable
@@ -31,13 +23,22 @@ namespace lyx { typedef wchar_t char_type; }
 
 #else
 
+#if defined(_MSC_VER) && (_MSC_VER >= 1600)
+#include <cstdint>
+namespace lyx { typedef uint32_t char_type; }
+#include "support/numpunct_lyx_char_type.h" // implementation for our char_type needed
+#else
 #include <boost/cstdint.hpp>
 namespace lyx { typedef boost::uint32_t char_type; }
+#endif
 
 #endif
 
 // Forward definitions do not work with libc++
-#ifdef  _LIBCPP_VERSION
+// 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
 
@@ -62,10 +63,14 @@ 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;
 
-} // namepace std
+} // namespace std
 
 #endif
 
+
+
+
+
 namespace lyx {
 
 /**
@@ -95,6 +100,15 @@ std::string const & empty_string();
 // defined in docstring.cpp
 bool operator==(docstring const &, char const *);
 
+#ifdef STD_STRING_USES_COW
+template<typename Char> class trivial_string;
+typedef trivial_string<char> trivstring;
+typedef trivial_string<char_type> trivdocstring;
+#else
+typedef std::string trivstring;
+typedef docstring trivdocstring;
+#endif
+
 } // namespace lyx
 
 #endif