https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106676
--- Comment #11 from Jonathan Wakely <redi at gcc dot gnu.org> --- So instead of: static_assert(std::same_as<typename std::iterator_traits<decltype(plus1.begin())>::iterator_category, std::input_iterator_tag>); Just use the much simpler: static_assert(std::input_iterator<decltype(plus1.begin())>); Or just do what you're already doing: static_assert(std::ranges::input_range<decltype(plus1)>); This checks that it's a range and has iterators that meet the std::input_iterator concept. If you want to work with ranges iterators, use the concepts for doing that. Don't check iterator_traits<>::iterator_category.