#include <iostream>
struct range : std::pair<int,int> {
struct int_iter {
int_iter( int i ) : i(i) {}
int operator*() { return i; }
int &operator++() { return ++i; }
bool operator!=( int_iter end ) const { return i != end.i; }
private:
int i;
};
using std::pair<int,int>::pair;
int_iter begin() const { return int_iter( first ); }
int_iter end() const { return int_iter(second); }
};
int main() {
for( auto i : range( 1, 5 ) )
std::cout << i << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKICAgIHN0cnVjdCByYW5nZSA6IHN0ZDo6cGFpcjxpbnQsaW50PiB7CgkgICAgc3RydWN0IGludF9pdGVyIHsKCSAgICAgICAgaW50X2l0ZXIoIGludCBpICkgOiBpKGkpIHt9CgkgICAgICAgIGludCBvcGVyYXRvciooKSB7IHJldHVybiBpOyB9CgkgICAgICAgIGludCAmb3BlcmF0b3IrKygpIHsgcmV0dXJuICsraTsgfQoJICAgICAgICBib29sIG9wZXJhdG9yIT0oIGludF9pdGVyIGVuZCApIGNvbnN0IHsgcmV0dXJuIGkgIT0gZW5kLmk7IH0KCSAgICBwcml2YXRlOiAgICAKCSAgICAgICAgaW50IGk7CgkgICAgfTsKICAgICAgICB1c2luZyBzdGQ6OnBhaXI8aW50LGludD46OnBhaXI7CiAgICAgICAgaW50X2l0ZXIgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpbnRfaXRlciggZmlyc3QgKTsgfQogICAgICAgIGludF9pdGVyIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGludF9pdGVyKHNlY29uZCk7IH0KICAgIH07CgppbnQgbWFpbigpIHsKCWZvciggYXV0byBpIDogcmFuZ2UoIDEsIDUgKSApCgkgICBzdGQ6OmNvdXQgPDwgaSA8PCBzdGQ6OmVuZGw7CglyZXR1cm4gMDsKfQ==