#include<iostream>

// class
template<typename A>
class Foo; // не делаем реализацию, чтоб нескомпилировалось

// instance
template<>
class Foo<int> // специализация
{
public:
    static
    int foo(int x)
    {
        return x + 1;
    }
};

template<typename A>
A bar(A a) {
    return Foo<A>::foo(a);
}

int main() {
    int x = 1;
    std::cout << bar<int>(x) << std::endl;
}