Имеется следующий код:test.h:
template <typename T>
class A
{
public:
T func();
};
test.cpp:
#include "test.h"
template <typename T>
T A<T>::func()
{
return 0;
}
t.cpp:
#include "test.h"
int main()
{
A<int> a;
a.func();
return -1;
}
SConstruct:
Program('test', ['t.cpp','test.cpp'], CCFLAGS="")
собираю с помощью scons. вывод:
slon@slon test $ scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o t.o -c t.cpp
g++ -o test.o -c test.cpp
g++ -o test t.o test.o
t.o: In function `main':
t.cpp:(.text+0x18): undefined reference to `A<int>::func()'
collect2: ld returned 1 exit status
scons: *** [test] Error 1
scons: building terminated because of errors.
Почему линкер не находит функцию func? Видимо необходимы какие-то особые параметры линковки/компиляции? Если перенести определение функции в класс - всё замечательно. Гугл и маны мне не помогли, вся надежда на совет. Заранее спасибо :)
Компилятор: gcc (GCC) 4.1.2 (Gentoo 4.1.2)
Линкер: GNU ld (GNU Binutils) 2.18