static difference_type distance_to_()

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
                }