https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119962
--- Comment #4 from 康桓瑋 <hewillk at gmail dot com> --- (In reply to Andrew Pinski from comment #2) > https://eel.is/c++draft/range.lazy.split.outer > > > Testcase from godbolt: > ``` > #include <ranges> > > struct I { > int x; > using difference_type = std::ptrdiff_t; > using value_type = int; > constexpr I& operator++() { return *this; } > constexpr value_type operator*() const { return {}; } > constexpr I operator++(int) { return *this; } > constexpr bool operator==(const I&) const = default; > }; > > int main() { > constexpr std::ranges::subrange s = {I{}, I{4}}; > auto split = s | std::views::lazy_split(0); > constexpr decltype(split.begin()) it; > } > > ``` > > Confirmed. That case was made when I was trying something else. Here is much simpler: #include <ranges> constexpr decltype( std::views::lazy_split(std::views::single(0), 0).begin() ) it; https://godbolt.org/z/rMhGsPz6x