// -*- C++ -*- // Heavily inspired by /usr/include/c++/4.1/bits // // Copyright (C) 2001, 2002 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the // Free Software Foundation; either version 2, or (at your option) // any later version. #ifndef STRFWD_H #define STRFWD_H #ifdef USE_WCHAR_T // Prefer this if possible because GNU libstdc++ has usable // std::ctype locale facets but not // std::ctype. gcc older than 3.4 is also missing // usable std::char_traits. 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 { template class allocator; template struct char_traits; template<> struct char_traits; #ifdef USE_WCHAR_T template<> struct char_traits; #endif template class basic_string; typedef basic_string, allocator > string; template class basic_istream; template class basic_ostream; template class basic_ostringstream; typedef basic_istream > istream; typedef basic_ostream > ostream; typedef basic_ostringstream, allocator > ostringstream; } // namespace std #endif namespace lyx { /** * 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; /// Base class for UCS4 input streams typedef std::basic_istream > idocstream; /// Base class for UCS4 output streams typedef std::basic_ostream > odocstream; /// UCS4 output stringstream typedef std::basic_ostringstream, std::allocator > odocstringstream; #if ! defined(USE_WCHAR_T) extern odocstream & operator<<(odocstream &, char); #endif // defined in lstrings.cpp docstring const & empty_docstring(); 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