template <typename T>
class LoopTemplate {
T max, cnt;
public:
LoopTemplate(T max) : max(max), cnt(0) {}
LoopTemplate(T min, T max) : max(max), cnt(min) {}
LoopTemplate& begin() {
return *this;
}
LoopTemplate& operator++() {
cnt++;
return *this;
}
T& operator*() {
return cnt;
}
bool operator!=(LoopTemplate&) {
return cnt < max;
}
LoopTemplate& end() {
return *this;
}
};
typedef LoopTemplate<long> Loop;
LoopTemplate<unsigned long long> operator "" _(unsigned long long n)
{
return LoopTemplate<unsigned long long>(n);
}
/* Exapmle usage */
#include <iostream>
void f(unsigned long long i)
{
std::cout << i << std::endl;
}
int main()
{
for (auto&& i : 10_) {
f(i);
}
int x = 3;
for (auto&& i : Loop(x)) {
f(i);
}
return 0;
}
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIExvb3BUZW1wbGF0ZSB7CglUIG1heCwgY250OwpwdWJsaWM6CglMb29wVGVtcGxhdGUoVCBtYXgpIDogbWF4KG1heCksIGNudCgwKSB7fQoJTG9vcFRlbXBsYXRlKFQgbWluLCBUIG1heCkgOiBtYXgobWF4KSwgY250KG1pbikge30KCUxvb3BUZW1wbGF0ZSYgYmVnaW4oKSB7CgkJcmV0dXJuICp0aGlzOwoJfQoJTG9vcFRlbXBsYXRlJiBvcGVyYXRvcisrKCkgewoJCWNudCsrOwoJCXJldHVybiAqdGhpczsKCX0KCVQmIG9wZXJhdG9yKigpIHsKCQlyZXR1cm4gY250OwoJfQoJYm9vbCBvcGVyYXRvciE9KExvb3BUZW1wbGF0ZSYpIHsKCQlyZXR1cm4gY250IDwgbWF4OwoJfQoJTG9vcFRlbXBsYXRlJiBlbmQoKSB7CgkJcmV0dXJuICp0aGlzOwoJfQp9Owp0eXBlZGVmIExvb3BUZW1wbGF0ZTxsb25nPiBMb29wOwpMb29wVGVtcGxhdGU8dW5zaWduZWQgbG9uZyBsb25nPiBvcGVyYXRvciAiIiBfKHVuc2lnbmVkIGxvbmcgbG9uZyBuKQp7CglyZXR1cm4gTG9vcFRlbXBsYXRlPHVuc2lnbmVkIGxvbmcgbG9uZz4obik7Cn0KCgovKiBFeGFwbWxlIHVzYWdlICovCiNpbmNsdWRlIDxpb3N0cmVhbT4KCnZvaWQgZih1bnNpZ25lZCBsb25nIGxvbmcgaSkKewoJc3RkOjpjb3V0IDw8IGkgPDwgc3RkOjplbmRsOwp9CgppbnQgbWFpbigpCnsKCWZvciAoYXV0byYmIGkgOiAxMF8pIHsKCQlmKGkpOwoJfQoKICAgIGludCB4ICA9IDM7CiAgICBmb3IgKGF1dG8mJiBpIDogTG9vcCh4KSkgewogICAgICAgIGYoaSk7CiAgICB9CiAgICAKCXJldHVybiAwOwp9Cg==