Fixes a small issue that prevented the use of iterators of containers of incomplete types. Added iterators of incomp-types to unit-tests.

This commit is contained in:
mikael
2014-09-21 19:46:58 -04:00
parent 3bbb0bbe0e
commit 59b46cd338
13 changed files with 82 additions and 2 deletions
+6 -1
View File
@@ -698,11 +698,16 @@ struct is_bidirectional_iterator<T, false>
static const bool value = false;
};
template<class IINodeType>
struct iiterator_node_value_type {
typedef typename IINodeType::value_type type;
};
template<class IIterator>
struct iiterator_types
{
typedef typename IIterator::value_type it_value_type;
typedef typename it_value_type::value_type value_type;
typedef typename iiterator_node_value_type<it_value_type>::type value_type;
typedef typename std::iterator_traits<IIterator>::pointer it_pointer;
typedef typename std::iterator_traits<IIterator>::difference_type difference_type;
typedef typename ::boost::intrusive::pointer_traits<it_pointer>::
+5
View File
@@ -216,6 +216,11 @@ struct tree_node
{ m_data = ::boost::move(v); }
};
template <class T, class VoidPointer, boost::container::tree_type_enum tree_type_value, bool OptimizeSize>
struct iiterator_node_value_type< tree_node<T, VoidPointer, tree_type_value, OptimizeSize> > {
typedef T type;
};
template<class Node, class Icont>
class insert_equal_end_hint_functor
{
+5
View File
@@ -81,6 +81,11 @@ struct list_node
{ return this->m_data; }
};
template <class T, class VoidPointer>
struct iiterator_node_value_type< list_node<T,VoidPointer> > {
typedef T type;
};
template<class Allocator>
struct intrusive_list_type
{
+5
View File
@@ -87,6 +87,11 @@ struct slist_node
{ return this->m_data; }
};
template <class T, class VoidPointer>
struct iiterator_node_value_type< slist_node<T,VoidPointer> > {
typedef T type;
};
template<class Allocator>
struct intrusive_slist_type
{