in include/range/v3/view/concat.hpp [220:244]
static difference_type distance_to_(meta::size_t<N>, cursor const &from, cursor const &to)
{
if(from.its_.which() > N)
return cursor::distance_to_(meta::size_t<N + 1>{}, from, to);
if(from.its_.which() == N)
{
if(to.its_.which() == N)
return distance(ranges::get<N>(from.its_), ranges::get<N>(to.its_));
#ifdef RANGES_WORKAROUND_MSVC_PERMISSIVE_DEPENDENT_BASE
return distance(ranges::get<N>(from.its_), ranges::end(std::get<N>(from.rng_->rngs_))) +
#else
return distance(ranges::get<N>(from.its_), end(std::get<N>(from.rng_->rngs_))) +
#endif
cursor::distance_to_(meta::size_t<N + 1>{}, from, to);
}
if(from.its_.which() < N && to.its_.which() > N)
return distance(std::get<N>(from.rng_->rngs_)) +
cursor::distance_to_(meta::size_t<N + 1>{}, from, to);
RANGES_ASSERT(to.its_.which() == N);
#ifdef RANGES_WORKAROUND_MSVC_PERMISSIVE_DEPENDENT_BASE
return distance(ranges::begin(std::get<N>(from.rng_->rngs_)), ranges::get<N>(to.its_));
#else
return distance(begin(std::get<N>(from.rng_->rngs_)), ranges::get<N>(to.its_));
#endif
}