base_type patch from Eric Niebler

[SVN r26818]
This commit is contained in:
Dave Abrahams
2005-01-23 15:40:15 +00:00
parent ba3e7a459e
commit 7707262a07
3 changed files with 18 additions and 2 deletions

View File

@ -19,7 +19,8 @@
friend class iterator_core_access; friend class iterator_core_access;
public: public:
iterator_adaptor(); iterator_adaptor();
explicit iterator_adaptor(Base iter); explicit iterator_adaptor(Base const& iter);
typedef Base base_type;
Base const& base() const; Base const& base() const;
protected: protected:
typedef iterator_adaptor iterator_adaptor\_; typedef iterator_adaptor iterator_adaptor\_;
@ -115,7 +116,7 @@ above are defined as follows:
``m_iterator`` default constructed. ``m_iterator`` default constructed.
``explicit iterator_adaptor(Base iter);`` ``explicit iterator_adaptor(Base const& iter);``
:Returns: An instance of ``iterator_adaptor`` with :Returns: An instance of ``iterator_adaptor`` with
``m_iterator`` copy constructed from ``iter``. ``m_iterator`` copy constructed from ``iter``.

View File

@ -278,6 +278,8 @@ namespace boost
{ {
} }
typedef Base base_type;
Base const& base() const Base const& base() const
{ return m_iterator; } { return m_iterator; }

View File

@ -316,6 +316,19 @@ main()
assert((*i).m_x == i->foo()); assert((*i).m_x == i->foo());
} }
// check that base_type is correct
{
// Test constant iterator idiom
typedef ptr_iterator<int> BaseIter;
test = static_assert_same<BaseIter::base_type,int*>::value;
test = static_assert_same<constant_iterator<BaseIter>::base_type,BaseIter>::value;
typedef modify_traversal<BaseIter, boost::incrementable_traversal_tag> IncrementableIter;
test = static_assert_same<IncrementableIter::base_type,BaseIter>::value;
}
std::cout << "test successful " << std::endl; std::cout << "test successful " << std::endl;
(void)test; (void)test;
return 0; return 0;