8#ifndef INCLUDED_BSLSTL_FORWARDITERATOR
9#define INCLUDED_BSLSTL_FORWARDITERATOR
118#include <bslscm_version.h>
156template <
class T,
class ITER_IMP,
class TAG_TYPE = std::forward_iterator_tag>
158#if defined(BSLS_LIBRARYFEATURES_STDCPP_LIBCSTD)
163 :
public std::iterator<TAG_TYPE,
164 typename bsl::remove_cv<T>::type,
171#if defined(BSLS_COMPILERFEATURES_SUPPORT_DECLTYPE) && \
172 defined(BSLS_COMPILERFEATURES_SUPPORT_STATIC_ASSERT)
175 decltype(*bslmf::Util::declval<const ITER_IMP&>())>::value,
176 "Forward iterators must return a true reference to their element when "
268 const ITER_IMP&
imp()
const;
278template <
class T1,
class T2,
class ITER_IMP,
class TAG_TYPE>
288template <
class T1,
class T2,
class ITER_IMP,
class TAG_TYPE>
295template <
class T,
class ITER_IMP,
class TAG_TYPE>
308template <
class T,
class ITER_IMP,
class TAG_TYPE>
315template <
class T,
class ITER_IMP,
class TAG_TYPE>
319: d_imp(implementation)
323template <
class T,
class ITER_IMP,
class TAG_TYPE>
332template <
class T,
class ITER_IMP,
class TAG_TYPE>
342template <
class T,
class ITER_IMP,
class TAG_TYPE>
351template <
class T,
class ITER_IMP,
class TAG_TYPE>
359template <
class T,
class ITER_IMP,
class TAG_TYPE>
366template <
class T,
class ITER_IMP,
class TAG_TYPE>
373template <
class T,
class ITER_IMP,
class TAG_TYPE>
384template <
class T,
class ITER_IMP,
class TAG_TYPE>
389 ForwardIterator<T,ITER_IMP,TAG_TYPE> tmp(iter);
394template <
class T1,
class T2,
class ITER_IMP,
class TAG_TYPE>
397 const ForwardIterator<T2,ITER_IMP,TAG_TYPE>& rhs)
399 return lhs.imp() == rhs.imp();
402template <
class T1,
class T2,
class ITER_IMP,
class TAG_TYPE>
405 const ForwardIterator<T2,ITER_IMP,TAG_TYPE>& rhs)
407 return !(lhs == rhs);
410#ifndef BDE_OPENSOURCE_PUBLICATION
415#ifdef bslstl_ForwardIterator
416#undef bslstl_ForwardIterator
419#define bslstl_ForwardIterator bslstl::ForwardIterator
Definition bslstl_forwarditerator.h:169
std::ptrdiff_t difference_type
Definition bslstl_forwarditerator.h:196
T & operator*() const
Definition bslstl_forwarditerator.h:361
const ITER_IMP & imp() const
Return a non-modifiable reference to the implementation object.
Definition bslstl_forwarditerator.h:376
ForwardIterator & operator=(const ForwardIterator &rhs)
UnCvqT value_type
Definition bslstl_forwarditerator.h:195
ForwardIterator & operator=(const ForwardNonConstIterator &rhs)
Definition bslstl_forwarditerator.h:335
ForwardIterator(const ForwardNonConstIterator &other)
Definition bslstl_forwarditerator.h:326
T * pointer
Definition bslstl_forwarditerator.h:197
ITER_IMP & imp()
Return a modifiable reference to the implementation object.
Definition bslstl_forwarditerator.h:353
T & reference
Definition bslstl_forwarditerator.h:198
T * operator->() const
Definition bslstl_forwarditerator.h:368
ForwardIterator & operator++()
Definition bslstl_forwarditerator.h:345
ForwardIterator(const ITER_IMP &implementation)
Definition bslstl_forwarditerator.h:318
std::forward_iterator_tag iterator_category
Definition bslstl_forwarditerator.h:199
ForwardIterator()
Definition bslstl_forwarditerator.h:310
ForwardIterator(const ForwardIterator &original)
#define BSLS_IDENT(str)
Definition bsls_ident.h:195
#define BSLS_UTIL_ADDRESSOF(OBJ)
Definition bsls_util.h:289
Definition bslstl_algorithm.h:82
BidirectionalIterator< T, ITER_IMP, TAG_TYPE > operator++(BidirectionalIterator< T, ITER_IMP, TAG_TYPE > &iter, int)
bool operator==(const BidirectionalIterator< T1, ITER_IMP, TAG_TYPE > &lhs, const BidirectionalIterator< T2, ITER_IMP, TAG_TYPE > &rhs)
bool operator!=(const BidirectionalIterator< T1, ITER_IMP, TAG_TYPE > &lhs, const BidirectionalIterator< T2, ITER_IMP, TAG_TYPE > &rhs)
Definition bslmf_islvaluereference.h:125
remove_const< typenameremove_volatile< t_TYPE >::type >::type type
Definition bslmf_removecv.h:126