всем привет. Такая проблема.
const auto fpsRange = std::ranges::iota_view(1, 32);
auto it = fpsRange.begin();
std::advance(it, 100); // Ok
std::advance(it, -10); // UB
что за фигня? Там же внутри итератора простое число хранится. Почему не разрешить обратный проход?
Или может кто знает, как сделать с минимумом телодвижений двунаправленный. Идея в том, чтобы заработал такой код
const auto testFps = [](int fps) { return fps < 15; };
auto it = std::ranges::lower_bound(fpsRange, true, std::ranges::less{}, [&](int fps){ return !testFps(fps); });
Сейчас он уверенно виснет.