X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Fstrfwd.h;h=58b44f59b3cd09effa4e639ab22b62061855f12e;hb=10b4a4718539ea45d908dc3d051ae2284f9678e6;hp=de8588cabce30c8517d48fb5132bd4d42dc7707a;hpb=07afd76b7c3560b53ad1377812a7a5f30696d163;p=lyx.git diff --git a/src/support/strfwd.h b/src/support/strfwd.h index de8588cabc..58b44f59b3 100644 --- a/src/support/strfwd.h +++ b/src/support/strfwd.h @@ -13,14 +13,6 @@ #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 > 19971L) -#include -#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 +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++ -#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 #else @@ -66,9 +67,17 @@ typedef basic_ostringstream, allocator > ostringst #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; @@ -91,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