Eu estava experimentando com std::iterator_traits
and std::views::iota
. E de repente descobri que std::iterator_traits
return unexpected type para uma categoria de iterador.
libc++
:
#include <ranges>
int main() {
auto view = std::views::iota(0ULL, 10000000000ULL);
static_assert(
std::is_same_v<
std::iterator_traits<decltype(view.begin())>::iterator_category
, std::input_iterator_tag>
);
}
libstdc++
:
#include <ranges>
int main() {
auto view = std::views::iota(0ULL, 10000000000ULL);
static_assert(
std::is_same_v<
std::iterator_traits<decltype(view.begin())>::iterator_category
, std::output_iterator_tag>
);
}
Qual a razão para isso? Por que a categoria de características difere de std::random_access_tag
?