diff options
author | Philipp A. Hartmann <pah@qo.cx> | 2017-12-12 23:16:07 +0300 |
---|---|---|
committer | Philipp A. Hartmann <pah@qo.cx> | 2017-12-12 23:16:07 +0300 |
commit | d75bb90a5dd8c5946ce7496748d1cea842aabc0f (patch) | |
tree | e484c6b13c577c72030289516374a67e5cba4296 | |
parent | 7caa4b2165ad1e01ee90f9028fe17f7655c13a83 (diff) |
Avoid inheritance from std::iterator
Instead of inheriting from the deprecated std::iterator
template, define the member typedefs needed for
std::iterator_traits directly.
Closes #1131.
-rw-r--r-- | include/rapidjson/document.h | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/include/rapidjson/document.h b/include/rapidjson/document.h index 094a07e8..eb6d7dcb 100644 --- a/include/rapidjson/document.h +++ b/include/rapidjson/document.h @@ -45,7 +45,7 @@ RAPIDJSON_DIAG_OFF(terminate) // ignore throwing RAPIDJSON_ASSERT in RAPIDJSON_N #endif // __GNUC__ #ifndef RAPIDJSON_NOMEMBERITERATORCLASS -#include <iterator> // std::iterator, std::random_access_iterator_tag +#include <iterator> // std::random_access_iterator_tag #endif #if RAPIDJSON_HAS_CXX11_RVALUE_REFS @@ -98,16 +98,13 @@ struct GenericMember { \see GenericMember, GenericValue::MemberIterator, GenericValue::ConstMemberIterator */ template <bool Const, typename Encoding, typename Allocator> -class GenericMemberIterator - : public std::iterator<std::random_access_iterator_tag - , typename internal::MaybeAddConst<Const,GenericMember<Encoding,Allocator> >::Type> { +class GenericMemberIterator { friend class GenericValue<Encoding,Allocator>; template <bool, typename, typename> friend class GenericMemberIterator; typedef GenericMember<Encoding,Allocator> PlainType; typedef typename internal::MaybeAddConst<Const,PlainType>::Type ValueType; - typedef std::iterator<std::random_access_iterator_tag,ValueType> BaseType; public: //! Iterator type itself @@ -117,12 +114,21 @@ public: //! Non-constant iterator type typedef GenericMemberIterator<false,Encoding,Allocator> NonConstIterator; + /** \name std::iterator_traits support */ + //@{ + typedef ValueType value_type; + typedef ValueType * pointer; + typedef ValueType & reference; + typedef std::ptrdiff_t difference_type; + typedef std::random_access_iterator_tag iterator_category; + //@} + //! Pointer to (const) GenericMember - typedef typename BaseType::pointer Pointer; + typedef pointer Pointer; //! Reference to (const) GenericMember - typedef typename BaseType::reference Reference; + typedef reference Reference; //! Signed integer type (e.g. \c ptrdiff_t) - typedef typename BaseType::difference_type DifferenceType; + typedef difference_type DifferenceType; //! Default constructor (singular value) /*! Creates an iterator pointing to no element. |