Fix MSVC-8.0 iterator sizes avoiding derivation from std::iterator_traits

This commit is contained in:
Ion Gaztañaga 2014-02-08 09:17:37 +01:00
parent c1fdae5eb4
commit 4f60ed75b5
5 changed files with 26 additions and 21 deletions

View File

@ -173,7 +173,8 @@ struct get_slist_impl
template<class BucketValueTraits, bool IsConst>
class hashtable_iterator
: public std::iterator
{
typedef std::iterator
< std::forward_iterator_tag
, typename BucketValueTraits::value_traits::value_type
, typename pointer_traits<typename BucketValueTraits::value_traits::value_type*>::difference_type
@ -181,8 +182,8 @@ class hashtable_iterator
<typename BucketValueTraits::value_traits::value_type, IsConst>::type *
, typename detail::add_const_if_c
<typename BucketValueTraits::value_traits::value_type, IsConst>::type &
>
{
> iterator_traits;
typedef typename BucketValueTraits::value_traits value_traits;
typedef typename BucketValueTraits::bucket_traits bucket_traits;
typedef typename value_traits::node_traits node_traits;
@ -207,9 +208,11 @@ class hashtable_iterator
}
public:
typedef typename value_traits::value_type value_type;
typedef typename detail::add_const_if_c<value_type, IsConst>::type *pointer;
typedef typename detail::add_const_if_c<value_type, IsConst>::type &reference;
typedef typename iterator_traits::difference_type difference_type;
typedef typename iterator_traits::value_type value_type;
typedef typename iterator_traits::pointer pointer;
typedef typename iterator_traits::reference reference;
typedef typename iterator_traits::iterator_category iterator_category;
hashtable_iterator ()
{}

View File

@ -67,7 +67,6 @@ struct list_node_traits
// node oriented bidirectional iterator:
template<class RealValueTraits, bool IsConst>
class list_iterator
: public iiterator<RealValueTraits, IsConst, std::bidirectional_iterator_tag>::iterator_base
{
protected:
typedef iiterator
@ -83,9 +82,11 @@ class list_iterator
typedef typename types_t::void_pointer void_pointer;
public:
typedef typename types_t::value_type value_type;
typedef typename types_t::pointer pointer;
typedef typename types_t::reference reference;
typedef typename types_t::iterator_traits::difference_type difference_type;
typedef typename types_t::iterator_traits::value_type value_type;
typedef typename types_t::iterator_traits::pointer pointer;
typedef typename types_t::iterator_traits::reference reference;
typedef typename types_t::iterator_traits::iterator_category iterator_category;
typedef typename pointer_traits
<void_pointer>::template rebind_pointer

View File

@ -56,7 +56,6 @@ struct slist_node_traits
// node oriented bidirectional iterator:
template<class RealValueTraits, bool IsConst>
class slist_iterator
: public iiterator<RealValueTraits, IsConst, std::forward_iterator_tag>::iterator_base
{
protected:
typedef iiterator
@ -72,9 +71,11 @@ class slist_iterator
typedef typename types_t::void_pointer void_pointer;
public:
typedef typename types_t::value_type value_type;
typedef typename types_t::pointer pointer;
typedef typename types_t::reference reference;
typedef typename types_t::iterator_traits::difference_type difference_type;
typedef typename types_t::iterator_traits::value_type value_type;
typedef typename types_t::iterator_traits::pointer pointer;
typedef typename types_t::iterator_traits::reference reference;
typedef typename types_t::iterator_traits::iterator_category iterator_category;
typedef typename pointer_traits
<void_pointer>::template rebind_pointer

View File

@ -82,7 +82,6 @@ struct tree_node_traits
// node oriented bidirectional iterator:
template<class RealValueTraits, bool IsConst>
class tree_iterator
: public iiterator<RealValueTraits, IsConst, std::bidirectional_iterator_tag>::iterator_base
{
protected:
typedef iiterator< RealValueTraits, IsConst
@ -99,13 +98,14 @@ class tree_iterator
typedef typename pointer_traits
<void_pointer>::template rebind_pointer
<const real_value_traits>::type const_real_value_traits_ptr;
typedef bstree_algorithms<node_traits> node_algorithms;
public:
typedef typename types_t::value_type value_type;
typedef typename types_t::pointer pointer;
typedef typename types_t::reference reference;
typedef bstree_algorithms<node_traits> node_algorithms;
typedef typename types_t::iterator_traits::difference_type difference_type;
typedef typename types_t::iterator_traits::value_type value_type;
typedef typename types_t::iterator_traits::pointer pointer;
typedef typename types_t::iterator_traits::reference reference;
typedef typename types_t::iterator_traits::iterator_category iterator_category;
tree_iterator()
{}

View File

@ -1106,7 +1106,7 @@ struct iiterator
, difference_type
, pointer
, reference
> iterator_base;
> iterator_traits;
static const bool stateful_value_traits =
detail::is_stateful_value_traits<real_value_traits>::value;
};