Этот маленький фрагмент кода запускает гнев компоновщика, когда он включен, по крайней мере, в два блока перевода (файлы cpp):
# ifndef MAXIMUM_HPP
# define MAXIMUM_HPP
template<typename T>
T maximum(const T & a, const T & b)
{
return a > b ? a : b ;
}
/* dumb specialization */
template<>
int maximum(const int & a, const int & b)
{
return a > b ? a : b ;
}
# endif // MAXIMUM_HPP
Но компилирует и связывает отлично с одной единицей перевода. Если я удалю специализацию, она отлично работает во всех ситуациях. Вот сообщение компоновщика:
g++ -o test.exe Sources\test.o Sources\other_test.o
Sources\other_test.o:other_test.cpp:(.text+0x0): multiple definition of `int maximum<int>(int const&, int const&)'
Sources\test.o:test.cpp:(.text+0x14): first defined here
Не разрешено ли создание шаблонов несколько раз? Как объяснить эту ошибку и как ее исправить?
Спасибо за любой совет!