#include <limits>
#include <type_traits>
template<typename T, typename Callable>
void foreach_int(Callable call)
{
static_assert(std::is_integral<T>::value, "T has to be an integral type");
T t = std::numeric_limits<T>::min();
while(1)
{
call(t);
if(t == std::numeric_limits<T>::max()) break;
++t;
}
}
#include <iostream>
int main()
{
foreach_int<char>([](char val){ std::cout << (int)val << std::endl; });
return 0;
}
I2luY2x1ZGUgPGxpbWl0cz4gCiNpbmNsdWRlIDx0eXBlX3RyYWl0cz4gCgp0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDYWxsYWJsZT4gCnZvaWQgZm9yZWFjaF9pbnQoQ2FsbGFibGUgY2FsbCkgCnsgCiAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2ludGVncmFsPFQ+Ojp2YWx1ZSwgIlQgaGFzIHRvIGJlIGFuIGludGVncmFsIHR5cGUiKTsgCiAgVCB0ID0gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWluKCk7IAogIHdoaWxlKDEpIAogIHsgCiAgICBjYWxsKHQpOyAKICAgIGlmKHQgPT0gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWF4KCkpIGJyZWFrOyAKICAgICsrdDsgCiAgfSAKfSAKCiNpbmNsdWRlIDxpb3N0cmVhbT4gCmludCBtYWluKCkgCnsgCiAgZm9yZWFjaF9pbnQ8Y2hhcj4oW10oY2hhciB2YWwpeyBzdGQ6OmNvdXQgPDwgKGludCl2YWwgPDwgc3RkOjplbmRsOyB9KTsgCiAgcmV0dXJuIDA7IAp9