#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;
}