Added support for Sun C++ compiler

git-svn-id: http://pugixml.googlecode.com/svn/trunk@452 99668b35-9821-0410-8761-19e4c4f06640
This commit is contained in:
arseny.kapoulkine 2010-05-25 21:46:07 +00:00
parent 1a1cc6f7f4
commit cd9bc5fa83
3 changed files with 35 additions and 1 deletions

View File

@ -4516,6 +4516,22 @@ namespace std
}
#endif
#if !defined(PUGIXML_NO_STL) && defined(__SUNPRO_CC)
namespace std
{
// Workarounds for (non-standard) iterator category detection
std::bidirectional_iterator_tag __iterator_category(const pugi::xml_node_iterator&)
{
return std::bidirectional_iterator_tag();
}
std::bidirectional_iterator_tag __iterator_category(const pugi::xml_attribute_iterator&)
{
return std::bidirectional_iterator_tag();
}
}
#endif
/**
* Copyright (c) 2006-2010 Arseny Kapoulkine
*

View File

@ -21,12 +21,21 @@ 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 _T> class allocator;
template <class _charT> struct char_traits;
template <class _charT, class _Traits> class basic_istream;
template <class _charT, class _Traits> class basic_ostream;
template <class _charT, class _Traits, class _Allocator> 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 _Ty> class allocator;
template <class _Ty> struct char_traits;
template <class _Elem, class _Traits> class basic_istream;
template <class _Elem, class _Traits> class basic_ostream;
template <class _Elem, class _Traits, class _Ax> 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
@ -2330,6 +2339,15 @@ namespace std
}
#endif
#if !defined(PUGIXML_NO_STL) && defined(__SUNPRO_CC)
namespace std
{
// Workarounds for (non-standard) iterator category detection
std::bidirectional_iterator_tag __iterator_category(const pugi::xml_node_iterator&);
std::bidirectional_iterator_tag __iterator_category(const pugi::xml_attribute_iterator&);
}
#endif
#endif
/**

View File

@ -768,7 +768,7 @@ namespace pugi
{
if (begin == end) return;
size_t count = std::distance(begin, end);
size_t count = end - begin;
size_t size = m_end - m_begin;
size_t capacity = m_eos - m_begin;