ranges::common_iterator< I, S > Struct Template Reference
Iterator

## Friends

variant< I, S > & | detail::cidata (common_iterator< I, S > &)
variant< I, S > const & | detail::cidata (common_iterator< I, S > const &)
template<typename I_ = I>
constexpr auto | iter_move (common_iterator const &i) noexcept(detail::has_nothrow_iter_move_v< I >) -> iter_rvalue_reference_t< I > requires input_iterator< I_ >
template<typename I2 , typename S2 >
auto | iter_swap (common_iterator const &x, common_iterator< I2, S2 > const &y) noexcept(is_nothrow_indirectly_swappable< I, I2 >::value) -> void requires indirectly_swappable< I2, I >

## Public Types

using | difference_type = iter_difference_t< I >

## Public Member Functions

| common_iterator (I i)
| common_iterator (S s)
template<typename I2 , typename S2 >
| common_iterator (common_iterator< I2, S2 > const &that) requires convertible_to< I2
iter_reference_t< I > | operator* () noexcept(noexcept(iter_reference_t< I >(*std::declval< I &>())))
auto | operator* () const noexcept(noexcept(iter_reference_t< I >(*std::declval< I const &>()))) -> iter_reference_t< I > requires readable< I const >
common_iterator & | operator++ ()
auto | operator++ (int) -> decltype(std::declval< I &>()++) requires(!forward_iterator< I >)
auto | operator++ (int) -> common_iterator requires forward_iterator< I >
template<typename J = I>
auto | operator-> () const noexcept(noexcept(common_iterator::operator_arrow_(std::declval< I const &>(), 42))) -> decltype(common_iterator::operator_arrow_(std::declval< J const &>(), 42)) requires readable< J >
template<typename I2 , typename S2 >
auto | operator= (common_iterator< I2, S2 > const &that) -> common_iterator &requires convertible_to< I2, I > &&convertible_to< S2, S >
I | S ())

## Public Attributes

I && | convertible_to< S2, S >: data_(detail::variant_core_access::make_empty<I