Comments 2
появившаяся в C++17. Но эта тема скорее связана с появлением поддержки диапазонов в C++
Если речь про std::ranges, они в стандарте появились в C++20.
Совершенно верно. Но логическая цепочка, которую я тут вижу, такова: идея разрешить end-итератору иметь тип, отличный от begin-итератора, родилась именно на основе концепции sentinels, то есть абстрактных "фиктивных" end-итераторов, которые служат лишь для того, чтобы проверить условие завершения в текущем итераторе. Считается, что sentinels возникли из Предложения N4382 Эрика Ниблера, из которого собственно и родились Ranges library (https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4382.pdf). Финализирована разработка Ranges library была лишь к C++20, но поддержка самой идеи sentinels появилась в C++ уже в C++17.
«Range-based for»: что интересного лежит на поверхности