#include <iostream>
using namespace std;
template <int n> class SomeClass
{
public:
void debug() {
cout << "SomeClass<" << n << ">" << endl;
}
};
constexpr int n[5] = { 4, 8, 16, 32, 64 };
template <int i>
struct loop
{
static void doit()
{
SomeClass<n[i]> C;
C.debug();
// other things depending on n[i]
loop<i+1>::doit();
}
};
template <>
struct loop<5>
{
static void doit()
{
}
};
int main() {
loop<0>::doit();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKICAgIHRlbXBsYXRlIDxpbnQgbj4gY2xhc3MgU29tZUNsYXNzIAogICAgewogICAgcHVibGljOgogICAgICAgIHZvaWQgZGVidWcoKSB7CiAgICAgICAgICAgIGNvdXQgPDwgIlNvbWVDbGFzczwiIDw8IG4gPDwgIj4iIDw8IGVuZGw7CiAgICAgICAgfQogICAgfTsKCmNvbnN0ZXhwciBpbnQgbls1XSA9IHsgNCwgOCwgMTYsIDMyLCA2NCB9OwoKdGVtcGxhdGUgPGludCBpPgpzdHJ1Y3QgbG9vcAp7CiAgICBzdGF0aWMgdm9pZCBkb2l0KCkKICAgIHsKICAgICAgICBTb21lQ2xhc3M8bltpXT4gQzsKICAgICAgICBDLmRlYnVnKCk7CiAgICAgICAgLy8gb3RoZXIgdGhpbmdzIGRlcGVuZGluZyBvbiBuW2ldCiAgICAgICAgbG9vcDxpKzE+Ojpkb2l0KCk7CiAgICB9Cn07Cgp0ZW1wbGF0ZSA8PiAKc3RydWN0IGxvb3A8NT4gCnsgICAgCiAgICBzdGF0aWMgdm9pZCBkb2l0KCkgCiAgICB7CiAgICB9IAp9OwoKaW50IG1haW4oKSB7CiAgICBsb29wPDA+Ojpkb2l0KCk7CglyZXR1cm4gMDsKfQo=