Actually, if we don't care about upstream any more, we can improve the pre-C++20 version too:
template <typename... _IteratorTypes> using __are_random_access_iterators = std::__or_<std::is_base_of<std::random_access_iterator_tag, std::__iter_category_t<_IteratorTypes>>...>;
Actually, if we don't care about upstream any more, we can improve the pre-C++20 version too:
template <typename... _IteratorTypes> access_ iterators or_<std: :is_base_ of<std: :random_ access_ iterator_ tag, :__iter_ category_ t<_IteratorType s>>...> ;
using __are_random_
= std::__
std: