https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122224
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to M Welinder from comment #0) > Created attachment 62525 [details] > Preprocessed source > > Calling std::prev on a iterator that isn't bidirectional is wrong. That's unclear: https://cplusplus.github.io/LWG/issue3197 > Should this compile? (See also bug 122194.) I think so, yes. std::prev(it, n) is equivalent to std::advance(it, -n) and so if you do std::prev(it, -1) then it's the same as ++it which doesn't need a bidirectional iterator. So we accept calling std::prev(it, n) on input iterators, but assert if n >= 0. > For me, it compiles. Without -O, it asserts. With -O, I get an infinite > loop. The former is better than the latter but a compile error would be > better. Without -O you get -D_GLIBCXX_ASSERTIONS by default, and there's an assertion that
