#include <iostream>
template<class F, int I, int N, int Step = 1, bool Stop = (Step>0) ? (I < N) : (N < I)>
struct for_
{
for_()
{
body_(I,N);
for_<F,I+Step,N,Step> next;
}
F body_;
};
template<class F, int I , int N, int Step>
struct for_<F,I,N,Step,false> {};
struct display
{
void operator()(int i,int n) { std::cout << i << std::endl; }
};
int main()
{
for_<display,0,10>();
std::cout <<"\n";
for_<display,0,10,3>();
std::cout <<"\n";
for_<display,10,0,-1>();
std::cout <<"\n";
}