Что-то я не пойму. В документации по icc 9.0 for linux есть опция -export, которая должна включать поддержку экспорта шаблонов. Но как начнёшь её использовать, компилятор ест, а линкер ругается. Причём странно, все нужные .et файлы генерируются, а на стадии линковки я всё равно получаю undefined reference. Может кто знает в чём проблема? Вот тест, который я пытаюсь скомпилировать:
// test3.h
#if !defined(test3_h_98273492)
#define test3_h_98273492
export template <typename T>
T foo(T x);
#endif // test3_h_98273492
// test3.cpp
#include "test3.h"
template <typename T>
T foo(T x)
{
return g(x * x + x);
}
// test3main.cpp
#include <cmath>
#include <iostream>
#include "test3.h"
using namespace std;
double g(double x)
{
return sqrt(x);
}
int main()
{
double x = 5.5;
cout << foo(x) << endl;
}
# compile
$ icpc -export test3.cpp test3main.cpp -o test3
/tmp/icpcGrZ2LE.o(.text+0x1e): In function `main':
: undefined reference to `double foo<double>(double)'