Range-v3
Range algorithms, views, and actions for the Standard Library
iterator_concepts.hpp File Reference

Classes

struct  ranges::v3::bidirectional_iterator_tag
 
struct  ranges::v3::concepts::BidirectionalIterator
 
struct  ranges::v3::concepts::ContiguousIterator
 
struct  ranges::v3::concepts::ForwardIterator
 
struct  ranges::v3::concepts::Incrementable
 
struct  ranges::v3::concepts::IndirectlyCopyable
 
struct  ranges::v3::concepts::IndirectlyCopyableStorable
 
struct  ranges::v3::concepts::IndirectlyMovable
 
struct  ranges::v3::concepts::IndirectlyMovableStorable
 
struct  ranges::v3::concepts::IndirectlySwappable
 
struct  ranges::v3::concepts::InputIterator
 
struct  ranges::v3::concepts::Iterator
 
struct  ranges::v3::concepts::OutputIterator
 
struct  ranges::v3::concepts::RandomAccessIterator
 
struct  ranges::v3::concepts::Readable
 
struct  ranges::v3::concepts::Sentinel
 
struct  ranges::v3::concepts::SizedSentinel
 
struct  ranges::v3::concepts::WeaklyIncrementable
 
struct  ranges::v3::concepts::Writable
 
struct  ranges::v3::contiguous_iterator_tag
 
struct  ranges::v3::difference_type< detail::projected_< I, Proj > >
 
struct  ranges::v3::forward_iterator_tag
 
struct  ranges::v3::input_iterator_tag
 
struct  ranges::v3::iterator_category< T >
 
struct  ranges::v3::iterator_category< T const >
 
struct  ranges::v3::random_access_iterator_tag
 

Typedefs

template<typename I1 , typename I2 , typename C = equal_to, typename P1 = ident, typename P2 = ident>
using ranges::v3::AsymmetricallyComparable = meta::strict_and< InputIterator< I1 >, InputIterator< I2 >, IndirectPredicate< C, projected< I1, P1 >, projected< I2, P2 > >>
 
template<typename I >
using ranges::v3::BidirectionalIterator = concepts::models< concepts::BidirectionalIterator, I >
 
template<typename I , typename V2 , typename C = ordered_less, typename P = ident>
using ranges::v3::BinarySearchable = meta::strict_and< ForwardIterator< I >, IndirectRelation< C, projected< I, P >, V2 const * > >
 
template<typename C , typename ... Is>
using ranges::v3::detail::common_result_indirect_invocable_ = meta::and_< indirect_invocable_< Invocable, C, Is... >, meta::lazy::invoke< iter_map_reduce_fn_< meta::bind_front< meta::quote< concepts::Invocable::result_t >, C & >, meta::quote< CommonReference > >, Is... > >
 
template<typename I1 , typename I2 , typename C = equal_to, typename P1 = ident, typename P2 = ident>
using ranges::v3::Comparable = meta::strict_and< AsymmetricallyComparable< I1, I2, C, P1, P2 >, IndirectRelation< C, projected< I1, P1 >, projected< I2, P2 > >>
 
template<typename I >
using ranges::v3::ContiguousIterator = concepts::models< concepts::ContiguousIterator, I >
 
template<typename I , typename T >
using ranges::v3::ExclusivelyWritable_ = meta::invoke< detail::exclusively_writable_< I >, T >
 
template<typename I >
using ranges::v3::ForwardIterator = concepts::models< concepts::ForwardIterator, I >
 
template<typename T >
using ranges::v3::Incrementable = concepts::models< concepts::Incrementable, T >
 
template<template< typename... > class InvocableConcept, typename C , typename ... Is>
using ranges::v3::detail::indirect_invocable_ = meta::and_< meta::strict_and< Readable< Is >... >, meta::lazy::invoke< iter_map_reduce_fn_< meta::bind_front< meta::quote< InvocableConcept >, C & >, meta::quote< meta::strict_and > >, Is... > >
 
template<typename C , typename ... Is>
using ranges::v3::IndirectInvocable = meta::and_< detail::common_result_indirect_invocable_< C, Is... >, CopyConstructible< C > >
 
template<typename I , typename O >
using ranges::v3::IndirectlyCopyable = concepts::models< concepts::IndirectlyCopyable, I, O >
 
template<typename I , typename O >
using ranges::v3::IndirectlyCopyableStorable = concepts::models< concepts::IndirectlyCopyableStorable, I, O >
 
template<typename I , typename O >
using ranges::v3::IndirectlyMovable = concepts::models< concepts::IndirectlyMovable, I, O >
 
template<typename I , typename O >
using ranges::v3::IndirectlyMovableStorable = concepts::models< concepts::IndirectlyMovableStorable, I, O >
 
template<typename I1 , typename I2 >
using ranges::v3::IndirectlySwappable = concepts::models< concepts::IndirectlySwappable, I1, I2 >
 
template<typename C , typename ... Is>
using ranges::v3::IndirectPredicate = meta::and_< detail::indirect_invocable_< Predicate, C, Is... >, CopyConstructible< C > >
 
template<typename C , typename ... Is>
using ranges::v3::IndirectRegularInvocable = IndirectInvocable< C, Is... >
 
template<typename C , typename I0 , typename I1 = I0>
using ranges::v3::IndirectRelation = meta::and_< detail::indirect_invocable_< Relation, C, I0, I1 >, CopyConstructible< C > >
 
template<typename I >
using ranges::v3::InputIterator = concepts::models< concepts::InputIterator, I >
 
template<class... Is>
using ranges::v3::detail::iter_args_lists_ = meta::push_back< meta::cartesian_product< meta::transform< meta::list< Is... >, meta::quote< readable_types_ > >>, meta::list< concepts::Readable::common_reference_t< Is >... > >
 
template<typename MapFn , typename ReduceFn >
using ranges::v3::detail::iter_map_reduce_fn_ = meta::compose< meta::uncurry< meta::on< ReduceFn, meta::uncurry< MapFn > >>, meta::quote< iter_args_lists_ > >
 
template<typename I >
using ranges::v3::Iterator = concepts::models< concepts::Iterator, I >
 
template<typename T >
using ranges::v3::iterator_concept = concepts::most_refined< meta::list< concepts::ContiguousIterator, concepts::RandomAccessIterator, concepts::BidirectionalIterator, concepts::ForwardIterator, concepts::InputIterator >, T >
 
template<typename T >
using ranges::v3::iterator_concept_t = meta::_t< iterator_concept< T > >
 
template<typename I , typename S >
using ranges::v3::IteratorRange = Sentinel< S, I >
 
template<typename I0 , typename I1 , typename Out , typename C = ordered_less, typename P0 = ident, typename P1 = ident>
using ranges::v3::Mergeable = meta::strict_and< InputIterator< I0 >, InputIterator< I1 >, WeaklyIncrementable< Out >, IndirectRelation< C, projected< I0, P0 >, projected< I1, P1 > >, IndirectlyCopyable< I0, Out >, IndirectlyCopyable< I1, Out > >
 
template<typename C , typename ... Is>
using ranges::v3::MoveIndirectInvocable = meta::and_< detail::common_result_indirect_invocable_< C, Is... >, MoveConstructible< C > >
 
template<typename I0 , typename I1 , typename Out , typename C = ordered_less, typename P0 = ident, typename P1 = ident>
using ranges::v3::MoveMergeable = meta::strict_and< InputIterator< I0 >, InputIterator< I1 >, WeaklyIncrementable< Out >, IndirectRelation< C, projected< I0, P0 >, projected< I1, P1 > >, IndirectlyMovable< I0, Out >, IndirectlyMovable< I1, Out > >
 
template<typename Out , typename T >
using ranges::v3::OutputIterator = concepts::models< concepts::OutputIterator, Out, T >
 
template<typename I , typename V = concepts::Readable::value_t<I>>
using ranges::v3::Permutable = meta::strict_and< ForwardIterator< I >, IndirectlySwappable< I, I >, IndirectlyMovableStorable< I, I > >
 
template<typename I , typename Proj >
using ranges::v3::projected = meta::if_c< IndirectRegularInvocable< Proj, I >::value, detail::projected_< I, Proj > >
 
template<typename I >
using ranges::v3::RandomAccessIterator = concepts::models< concepts::RandomAccessIterator, I >
 
template<typename T >
using ranges::v3::Readable = concepts::models< concepts::Readable, T >
 
template<typename I >
using ranges::v3::detail::readable_types_ = meta::list< concepts::Readable::value_t< I > &, concepts::Readable::reference_t< I > >
 
template<typename S , typename I >
using ranges::v3::Sentinel = concepts::models< concepts::Sentinel, S, I >
 
template<typename I >
using ranges::v3::SinglePass = meta::strict_and< Iterator< I >, meta::not_< ForwardIterator< I > >>
 
template<typename S , typename I >
using ranges::v3::sized_sentinel_concept = concepts::most_refined< meta::list< concepts::SizedSentinel, concepts::Sentinel >, S, I >
 
template<typename S , typename I >
using ranges::v3::sized_sentinel_concept_t = meta::_t< sized_sentinel_concept< S, I > >
 
template<typename I , typename S >
using ranges::v3::SizedIteratorRange = SizedSentinel< S, I >
 
template<typename S , typename I >
using ranges::v3::SizedSentinel = concepts::models< concepts::SizedSentinel, S, I >
 
template<typename I , typename C = ordered_less, typename P = ident>
using ranges::v3::Sortable = meta::strict_and< ForwardIterator< I >, IndirectRelation< C, projected< I, P >, projected< I, P > >, Permutable< I > >
 
template<typename T >
using ranges::v3::WeaklyIncrementable = concepts::models< concepts::WeaklyIncrementable, T >
 
template<typename Out , typename T >
using ranges::v3::Writable = concepts::models< concepts::Writable, Out, T >