#include <iostream>
#include <limits>
#include <functional>
using namespace std;

template <class T>
void for_all(std::function<void(T)> fn)
{
    T lowest = std::numeric_limits<T>::lowest();
    T max    = std::numeric_limits<T>::max();
    for (T i{lowest}; i < max; ++i)
       fn(i);
    fn(max);
}

int main() {
    for_all<int>([](int i) { 
    	cout << i << endl;
    });
}