8#ifndef INCLUDED_BSLSTL_FORWARDITERATOR
9#define INCLUDED_BSLSTL_FORWARDITERATOR
120#include <bslscm_version.h>
158template <
class T,
class ITER_IMP,
class TAG_TYPE = std::forward_iterator_tag>
160#if defined(BSLS_LIBRARYFEATURES_STDCPP_LIBCSTD)
165 :
public std::iterator<TAG_TYPE,
166 typename bsl::remove_cv<T>::type,
173#if defined(BSLS_COMPILERFEATURES_SUPPORT_DECLTYPE) && \
174 defined(BSLS_COMPILERFEATURES_SUPPORT_STATIC_ASSERT)
177 decltype(*bslmf::Util::declval<const ITER_IMP&>())>::value,
178 "Forward iterators must return a true reference to their element when "
278 const ITER_IMP&
imp()
const;
289template <
class T1,
class T2,
class ITER_IMP,
class TAG_TYPE>
300template <
class T1,
class T2,
class ITER_IMP,
class TAG_TYPE>
308template <
class T,
class ITER_IMP,
class TAG_TYPE>
321template <
class T,
class ITER_IMP,
class TAG_TYPE>
328template <
class T,
class ITER_IMP,
class TAG_TYPE>
332: d_imp(implementation)
336template <
class T,
class ITER_IMP,
class TAG_TYPE>
345template <
class T,
class ITER_IMP,
class TAG_TYPE>
355template <
class T,
class ITER_IMP,
class TAG_TYPE>
364template <
class T,
class ITER_IMP,
class TAG_TYPE>
372template <
class T,
class ITER_IMP,
class TAG_TYPE>
379template <
class T,
class ITER_IMP,
class TAG_TYPE>
386template <
class T,
class ITER_IMP,
class TAG_TYPE>
397template <
class T,
class ITER_IMP,
class TAG_TYPE>
402 ForwardIterator<T,ITER_IMP,TAG_TYPE> tmp(iter);
407template <
class T1,
class T2,
class ITER_IMP,
class TAG_TYPE>
410 const ForwardIterator<T2,ITER_IMP,TAG_TYPE>& rhs)
412 return lhs.imp() ==
rhs.imp();
415template <
class T1,
class T2,
class ITER_IMP,
class TAG_TYPE>
418 const ForwardIterator<T2,ITER_IMP,TAG_TYPE>& rhs)
423#ifndef BDE_OPENSOURCE_PUBLICATION
428#ifdef bslstl_ForwardIterator
429#undef bslstl_ForwardIterator
432#define bslstl_ForwardIterator bslstl::ForwardIterator
Definition bslstl_forwarditerator.h:171
std::ptrdiff_t difference_type
Definition bslstl_forwarditerator.h:198
T & operator*() const
Definition bslstl_forwarditerator.h:374
const ITER_IMP & imp() const
Return a non-modifiable reference to the implementation object.
Definition bslstl_forwarditerator.h:389
ForwardIterator & operator=(const ForwardIterator &rhs)
UnCvqT value_type
Definition bslstl_forwarditerator.h:197
ForwardIterator & operator=(const ForwardNonConstIterator &rhs)
Definition bslstl_forwarditerator.h:348
ForwardIterator(const ForwardNonConstIterator &other)
Definition bslstl_forwarditerator.h:339
T * pointer
Definition bslstl_forwarditerator.h:199
ITER_IMP & imp()
Return a modifiable reference to the implementation object.
Definition bslstl_forwarditerator.h:366
T & reference
Definition bslstl_forwarditerator.h:200
T * operator->() const
Definition bslstl_forwarditerator.h:381
ForwardIterator & operator++()
Definition bslstl_forwarditerator.h:358
ForwardIterator(const ITER_IMP &implementation)
Definition bslstl_forwarditerator.h:331
std::forward_iterator_tag iterator_category
Definition bslstl_forwarditerator.h:201
ForwardIterator()
Definition bslstl_forwarditerator.h:323
ForwardIterator(const ForwardIterator &original)
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
#define BSLS_UTIL_ADDRESSOF(OBJ)
Definition bsls_util.h:296
ALLOCATOR const STRING_VIEW_LIKE_TYPE & rhs
Definition bslstl_string.h:3918
ALLOCATOR & lhs
Definition bslstl_string.h:3917
Definition bslstl_algorithm.h:84
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:135
remove_const< typenameremove_volatile< t_TYPE >::type >::type type
Definition bslmf_removecv.h:128