Esiste una class di intervallo in C ++ 11 da usare con range based for loops?

Mi sono ritrovato a scrivere questo poco fa:

template  class range_class { public: class iterator { friend class range_class; public: long int operator *() const { return i_; } const iterator &operator ++() { ++i_; return *this; } iterator operator ++(int) { iterator copy(*this); ++i_; return copy; } bool operator ==(const iterator &other) const { return i_ == other.i_; } bool operator !=(const iterator &other) const { return i_ != other.i_; } protected: iterator(long int start) : i_ (start) { } private: unsigned long i_; }; iterator begin() const { return iterator(T_begin); } iterator end() const { return iterator(T_end); } }; template  const range_class range() { return range_class(); } 

E questo mi consente di scrivere cose come questa:

 for (auto i: range()) { // stuff with i } 

Ora, so che quello che ho scritto è forse il miglior codice. E forse c’è un modo per renderlo più flessibile e utile. Ma mi sembra che qualcosa del genere avrebbe dovuto essere parte dello standard.

Quindi è così? È stata aggiunta una sorta di nuova libreria per gli iteratori su un intervallo di numeri interi, o forse un intervallo generico di valori scalari calcolati?