X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Fstrfwd.h;h=c7e9c55517d6eb4726244274cdbb0b79503bc9b5;hb=cc2835392294fb1e82a89b2ec3803f78c9183f18;hp=f1dcb0bca925d4b75244a996ad9ce1fbfd7829b8;hpb=ecef54500d4d77baf4fa47eac2253679875ac08c;p=lyx.git diff --git a/src/support/strfwd.h b/src/support/strfwd.h index f1dcb0bca9..c7e9c55517 100644 --- a/src/support/strfwd.h +++ b/src/support/strfwd.h @@ -23,11 +23,24 @@ namespace lyx { typedef wchar_t char_type; } #else +#if defined(_MSC_VER) && (_MSC_VER >= 1600) +#include +namespace lyx { typedef uint32_t char_type; } +#include "support/numpunct_lyx_char_type.h" // implementation for our char_type needed +#else #include namespace lyx { typedef boost::uint32_t char_type; } +#endif #endif +// 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 +#else namespace std { @@ -50,12 +63,21 @@ typedef basic_istream > istream; typedef basic_ostream > ostream; typedef basic_ostringstream, allocator > ostringstream; -} // namepace std +} // namespace std + +#endif + + + namespace lyx { -/// String type for storing the main text in UCS4 encoding +/** + * String type for storing the main text in UCS4 encoding. + * Use std::string only in cases 7-bit ASCII is to be manipulated + * within the variable. + */ typedef std::basic_string, std::allocator > docstring; @@ -78,6 +100,15 @@ std::string const & empty_string(); // defined in docstring.cpp bool operator==(docstring const &, char const *); +#ifdef STD_STRING_USES_COW +template class trivial_string; +typedef trivial_string trivstring; +typedef trivial_string trivdocstring; +#else +typedef std::string trivstring; +typedef docstring trivdocstring; +#endif + } // namespace lyx #endif