#include <stlsoft/iterators/adapted_iterator_traits.hpp>
Public Types | |
enum | { IS_DINKUMWARE_OLD_FORM } |
enum | { REF_CAT_IS_VOID = 0 != is_same_type<value_type, value = (0 == IS_DINKUMWARE_OLD_FORM) } |
enum | { REF_CAT_IS_BVT = 0 == REF_CAT_IS_VOID && 0 != is_same_type<pointer, value = (0 == IS_DINKUMWARE_OLD_FORM) } |
typedef I::iterator_category | iterator_category |
The iterator category. | |
typedef I::value_type | value_type |
The value type. | |
typedef select_first_type_if < typename typefixer::fixer_difference_type < I, HAS_MEMBER_DIFFERENCE_TYPE > ::difference_type, ss_ptrdiff_t, HAS_MEMBER_DIFFERENCE_TYPE > ::type | difference_type |
The difference type. | |
typedef select_first_type_if < putative_pointer_, void, HAS_MEMBER_POINTER||IS_DINKUMWARE_OLD_FORM > ::type | pointer |
The pointer type. | |
typedef select_first_type_if < putative_reference_, void, HAS_MEMBER_REFERENCE||IS_DINKUMWARE_OLD_FORM > ::type | reference |
The reference type. | |
typedef select_first_type_if < void, pointer_base_type_ const *, REF_CAT_IS_VOID||REF_CAT_IS_BVT > ::type | const_pointer |
The const_pointer type. | |
typedef select_first_type_if < void, typename add_const_ref < reference_base_type_ >::type, REF_CAT_IS_VOID||REF_CAT_IS_BVT > ::type | const_reference |
The const_reference type. | |
typedef select_first_type_if < value_type, reference, REF_CAT_IS_BVT >::type | effective_reference |
The effective reference type. | |
typedef select_first_type_if < typename add_const < value_type >::type, const_reference, REF_CAT_IS_BVT >::type | effective_const_reference |
The effective const_reference type. | |
typedef select_first_type_if < void, pointer, REF_CAT_IS_BVT >::type | effective_pointer |
The effective pointer type. | |
typedef select_first_type_if < void, const_pointer, REF_CAT_IS_BVT >::type | effective_const_pointer |
The effective const_pointer type. | |
Static Protected Member Functions | |
static void | constraints () |
typedef I::iterator_category iterator_category |
The iterator category.
This is simply the member iterator_category
of the adapted iterator type
typedef I::value_type value_type |
The value type.
This is simply the member value_type
of the adapted iterator type
typedef select_first_type_if< typename typefixer::fixer_difference_type<I, HAS_MEMBER_DIFFERENCE_TYPE>::difference_type , ss_ptrdiff_t , HAS_MEMBER_DIFFERENCE_TYPE >::type difference_type |
The difference type.
This is the member value_type
of the adapted iterator type, if it is defined, or ptrdiff_t
if not.
typedef select_first_type_if<putative_pointer_ , void , HAS_MEMBER_POINTER || IS_DINKUMWARE_OLD_FORM >::type pointer |
The pointer type.
This is the member pointer
of the adapted iterator type, if it is defined. If not, it is defined to be void
, so as to prevent any dangerous use of it. This will likely act as a compile-time constraint to prevent the base iterator type being adapted (which is nice).
typedef select_first_type_if<putative_reference_ , void , HAS_MEMBER_REFERENCE || IS_DINKUMWARE_OLD_FORM >::type reference |
The reference type.
This is the member reference
of the adapted iterator type, if it is defined. If not, it is defined to be void
, so as to prevent any dangerous use of it. This will likely act as a compile-time constraint to prevent the base iterator type being adapted (which is nice).
typedef select_first_type_if<void , pointer_base_type_ const* , REF_CAT_IS_VOID || REF_CAT_IS_BVT >::type const_pointer |
The const_pointer type.
This is either void, if the iterator element reference category is Void or BVT, otherwise it's "<i>value_type</i>" const*
, where "<i>value_type</i>"
is the deduced value type obtained from pointer
.
typedef select_first_type_if<void , typename add_const_ref<reference_base_type_>::type , REF_CAT_IS_VOID || REF_CAT_IS_BVT >::type const_reference |
The const_reference type.
This is either void, if the iterator element reference category is Void or BVT, otherwise it's "<i>value_type</i>" const*
, where "<i>value_type</i>"
is the deduced value type obtained from reference
.
typedef select_first_type_if<value_type , reference , REF_CAT_IS_BVT >::type effective_reference |
The effective reference type.
If the base iterator element reference category is Transient or higher, then this is the reference member of the base iterator. Otherwise, if the reference category is BVT then this is value_type. Otherwise (if the reference category is Void), then this is void
typedef select_first_type_if< typename add_const<value_type>::type , const_reference , REF_CAT_IS_BVT >::type effective_const_reference |
The effective const_reference type.
If the base iterator element reference category is Transient or higher, then this is const_reference. Otherwise, if the reference category is BVT then this is value_type. Otherwise (if the reference category is Void), then this is void
typedef select_first_type_if<void , pointer , REF_CAT_IS_BVT >::type effective_pointer |
The effective pointer type.
If the base iterator element pointer category is Transient or higher, then this is the pointer member of the base iterator. Otherwise, if the pointer category is BVT then this is void. Otherwise (if the pointer category is Void), then this is void
typedef select_first_type_if<void , const_pointer , REF_CAT_IS_BVT >::type effective_const_pointer |
The effective const_pointer type.
If the base iterator element pointer category is Transient or higher, then this is const_pointer. Otherwise, if the pointer category is BVT then this is void. Otherwise (if the pointer category is Void), then this is void