История изменений
Исправление Siborgium, (текущая версия) :
А «схема» реализуется через обычный объект с begin-end, а-ля:
struct Sequence {
size_t counter_ = 0;
size_t end_ = 0;
constexpr auto current() { return counter_; }
constexpr auto next() { counter_++; }
constexpr auto eor() { return counter_ == end_; }
struct End {};
struct Begin {
Sequence& ref;
constexpr auto operator != (End) { return !ref.eor(); }
decltype(auto) operator * () {
return ref.current();
}
auto& operator ++ () {
ref.next();
return *this;
}
};
constexpr auto begin() { return Begin{ *this }; }
constexpr auto end() { return End{}; }
};
int main() {
Sequence sequence{0, 10};
for (auto i: sequence) {
std::cout << i << '\n';
}
}
Исходная версия Siborgium, :
А «схема» реализуется через обычный объект с begin-end, а-ля:
for (auto && value: sequence) {
// ...
}