https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102181
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |INVALID Status|UNCONFIRMED |RESOLVED --- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to Raffael Casagrande from comment #3) > MSVC compiles the snippet without problems... It looks like they do not correctly implement iota_view. This C++20 proposal, specifically: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1522r1.pdf This program fails with MSVC: #include <ranges> int main() { using type = uint64_t; // using type = int works! auto v = std::views::iota(0ull, ~0ull); auto b = v.end() - v.begin(); static_assert(!std::same_as<decltype(b), int64_t>); } It is required to compile. You cannot use int64_t to represent the difference type of an iota_view with that many elements. I think GCC is correct according to the standard.