У меня проблемы с переносом кода, который отлично работает в Windows в Visual Studio 2017 C ++ для работы в Linux с GCC 8.2.
#include <stdio.h>
class A
{
public:
int value;
};
template<typename T> int GetValue(T value);
template<typename T> int GetValue(A value)
{
return value.value;
}
template int GetValue<A>(A value);
int main(int argc, char **argv)
{
A valueHolder;
valueHolder.value = 42;
int value = GetValue(valueHolder);
printf("hello %d!", value);
return 0;
}
Он компилируется и работает с правильным выводом в Windows, но в Linux я получаю ошибку компиляции с Неопределенная ссылка на 'int GetValue (A)' при использовании GetValue в основной функции.
Мой реальный случай на самом деле более сложен, когда код шаблона находится в библиотеке, которая связана с ним. Там я получаю ошибку компоновки, хотя я вижу, что функция экземпляра шаблона находится внутри библиотеки при проверке с помощью 'nm'.
Как мне заставить этот тип создания экземпляров шаблона работать с GCC?