#include <iostream>
using namespace std;
template <int N>
void f();
template <>
void f<0>()
{
printf("f<0>");
}
template <>
void f<1>()
{
printf("f<1>");
}
void call_f(int i)
{
switch(i)
{
case 0:
f<0>();
break;
case 1:
f<1>();
break;
default:
// invalid i, report error
break;
}
}
int main() {
f<0>();
f<1>();
// f<2>(); // compile error
call_f(0);
call_f(1);
call_f(2); // runtime error
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPGludCBOPgp2b2lkIGYoKTsKCnRlbXBsYXRlIDw+CnZvaWQgZjwwPigpCnsKCXByaW50ZigiZjwwPiIpOwp9Cgp0ZW1wbGF0ZSA8Pgp2b2lkIGY8MT4oKQp7CglwcmludGYoImY8MT4iKTsKfQoKdm9pZCBjYWxsX2YoaW50IGkpCnsKICAgIHN3aXRjaChpKQogICAgewogICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgZjwwPigpOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgIGY8MT4oKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgLy8gaW52YWxpZCBpLCByZXBvcnQgZXJyb3IKICAgICAgICAgICAgYnJlYWs7CiAgICB9Cn0KCmludCBtYWluKCkgewoJZjwwPigpOwoJZjwxPigpOwoJLy8gZjwyPigpOyAvLyBjb21waWxlIGVycm9yCiAgICAKICAgIGNhbGxfZigwKTsKICAgIGNhbGxfZigxKTsKICAgIGNhbGxfZigyKTsgLy8gcnVudGltZSBlcnJvcgoJcmV0dXJuIDA7Cn0=