From 3a282e2f0b21ec01626e76fa94ef0579b5326f8d Mon Sep 17 00:00:00 2001 From: "arseny.kapoulkine@gmail.com" Date: Tue, 20 Mar 2012 06:19:31 +0000 Subject: STL forward declaration experiment failed; revert to using STL headers. Reasons: bugs in old compilers (i.e. SunCC, DMC, BCC require using the same names in forward declarations as in actual declarations), incompatibility between buggy compilers and different STL versions (i.e. SunCC has two STL versions with mismatching names), problems with C++0x inline namespaces (used in Clang libc++, see http://llvm.org/bugs/show_bug.cgi?id=5590), and this is an undefined behavior so other problems may come up. git-svn-id: http://pugixml.googlecode.com/svn/trunk@868 99668b35-9821-0410-8761-19e4c4f06640 --- src/pugixml.hpp | 47 ++++------------------------------------------- 1 file changed, 4 insertions(+), 43 deletions(-) diff --git a/src/pugixml.hpp b/src/pugixml.hpp index 44d4d76..74c520c 100644 --- a/src/pugixml.hpp +++ b/src/pugixml.hpp @@ -30,50 +30,11 @@ # include #endif +// Include STL headers #ifndef PUGIXML_NO_STL -// cstddef is needed so that we get the 'std' namespace declaration (STLport sometimes makes std a define) -# include - -# if defined(PUGIXML_NO_STL_FWDDECL) -# include -# include -# include -# else -// Forward declarations for STL classes to reduce include dependencies -namespace std -{ - struct bidirectional_iterator_tag; - -#ifdef __SUNPRO_CC - // Sun C++ compiler has a bug which forces template argument names in forward declarations to be the same as in actual definitions - template class allocator; - template struct char_traits; - template class basic_istream; - template class basic_ostream; - template class basic_string; -#else - // Borland C++ compiler has a bug which forces template argument names in forward declarations to be the same as in actual definitions - template class allocator; - - // STLport defines char_traits as a class instead of a struct -# ifdef _STLPORT_VERSION - template class char_traits; -# else - template struct char_traits; -# endif - - template class basic_istream; - template class basic_ostream; - template class basic_string; -#endif - - // Digital Mars compiler has a bug which requires a forward declaration for explicit instantiation (otherwise type selection is messed up later, producing link errors) - // Also note that we have to declare char_traits as a class here, since it's defined that way -#ifdef __DMC__ - template <> class char_traits; -#endif -} -#endif +# include +# include +# include #endif // Macro for deprecated features -- cgit v1.2.3