Ваш код правильный.
Сообщение об ошибке относится к месту в коде, который вы здесь не указали.
Обновление:
Оригинальный код
template <class T> int function_name(T a) {}
template int function_name<int>(int);
и это было правильно.
Но это не было в кавычках и поэтому выглядело так:
template int function_name(T a) {}
template int function_name(int);
Генерирует следующую ошибку
a.cpp:1: error: explicit instantiation of non-template ‘int function_name’
a.cpp:1: error: expected `;' before ‘(’ token
a.cpp:3: error: ‘function_name’ is not a template function
, что явно отличается от того, что было указано в ОП.
В этом варианте вторая строка в порядке (здесь можно опустить <int>
), но первая строка неверна. Компилятор не может догадаться, что T
является параметром шаблона.