Явно специализированная шаблонная функция foo()
должна быть видимой, прежде чем ее можно будет вызвать / создать.
Фактически вышеупомянутое правило применяется ко всем функциям шаблона.
Решение:
Переместите специализацию шаблона на foo()
перед вашим main()
.
Следующее должно работать нормально:
template <class T> T foo(T a, T b);
/*Should be visible before instantiation*/
template <> int foo<int>(int a, int b)
{
cout<<"int specialization";
}
int main()
{
int x=34, y=54;
cout<<foo(x, y);
}
template <class T> T foo(T a, T b)
{
return a+b;
}