Header file range/v3/utility/common_iterator.hpp

#include <meta/meta.hpp>

#include <range/v3/range_fwd.hpp>

#include <range/v3/utility/basic_iterator.hpp>

#include <range/v3/utility/concepts.hpp>

#include <range/v3/detail/variant.hpp>

namespace ranges
{
    inline namespace v3
    {
        namespace detail
        {
            template <typename I, bool IsReadable = (bool)Readable<I>()>
            struct common_cursor_types{};
            
            template <typename I>
            struct common_cursor_types<I, true>
            {
                using single_pass = SinglePass<I>;
                
                using value_type = iterator_value_t<I>;
            };
            
            template <typename I, typename S>
            struct common_cursor
            {
                common_cursor() = default;
                
                template <typename I2, typename S2, int _concept_requires_147 = 42, typename std::enable_if<(_concept_requires_147==43)||(ExplicitlyConvertibleTo<I, I2>()&&ExplicitlyConvertibleTo<S, S2>()), int>::type=0>
                operator common_cursor<I2, S2>() const;
            };
        }
    }
}