#include <iostream>
#include <typeinfo>
#include <stdio.h>
using namespace std;
template <class T>
void doLoop(T from,T to)
{
for (T theVar = from; theVar<to; theVar++) cout << theVar << "\n";
}
template <class T>
struct BestParameterPassingType
{
typedef T Type;
};
// int взят для наглядности
template <>
struct BestParameterPassingType<int>
{
typedef int &Type;
};
int main ()
{
int j = 0, k = 10;
doLoop<BestParameterPassingType<int>::Type> (j,k);
cout << "j = " << j << "\n";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZWluZm8+CiNpbmNsdWRlIDxzdGRpby5oPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlIDxjbGFzcyBUPgp2b2lkIGRvTG9vcChUIGZyb20sVCB0bykKewogICAgICAgIGZvciAoVCB0aGVWYXIgPSBmcm9tOyB0aGVWYXI8dG87IHRoZVZhcisrKSBjb3V0IDw8IHRoZVZhciA8PCAiXG4iOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4Kc3RydWN0IEJlc3RQYXJhbWV0ZXJQYXNzaW5nVHlwZQp7CiAgICAgICAgdHlwZWRlZiBUIFR5cGU7Cn07CgovLyBpbnQg0LLQt9GP0YIg0LTQu9GPINC90LDQs9C70Y/QtNC90L7RgdGC0LgKdGVtcGxhdGUgPD4Kc3RydWN0IEJlc3RQYXJhbWV0ZXJQYXNzaW5nVHlwZTxpbnQ+CnsKICAgICAgICB0eXBlZGVmIGludCAmVHlwZTsKfTsKCmludCBtYWluICgpCnsKICAgICAgICBpbnQgaiA9IDAsIGsgPSAxMDsKICAgICAgICBkb0xvb3A8QmVzdFBhcmFtZXRlclBhc3NpbmdUeXBlPGludD46OlR5cGU+IChqLGspOwogICAgICAgIGNvdXQgPDwgImogPSAiIDw8IGogPDwgIlxuIjsKfQo=