У меня очень странная проблема в новой установке OSX 10.4.11 + Xcode 2.5. Я сократил это до минимального теста. Вот test.cpp:
#include "macros.h"
int main (void)
{
return 1;
}
А вот macros.h:
#ifndef __JUST_TESTING__
#define __JUST_TESTING__
template<typename T> void swap (T& pT1, T& pT2)
{
T pTmp = pT1;
pT1 = pT2;
pT2 = pTmp;
}
#endif //__JUST_TESTING__
Это компилируется и прекрасно работает, если оба файла находятся в одном каталоге. ОДНАКО, если я помещу macros.h в / usr / include / gfc2 (это часть пользовательской библиотеки, которую я использую) и изменю #include в test.cpp, компиляция завершится с этой ошибкой:
/usr/include/gfc2/macros.h:4: error: template with C linkage
Я исследовал эту ошибку, и большинство комментариев указывают на «висячий внешний C», который, похоже, совсем не тот.
Я в полной растерянности. Является ли g ++ по какой-то причине, предполагая, что все в /usr/include/gfc2
является C, хотя он включен из файла .cpp, который нигде не говорит extern «C»?
Есть идеи?
РЕДАКТИРОВАТЬ: он компилируется, если я использую полный путь в #include
, то есть #include "/usr/include/gfc2/macros.h"
РЕДАКТИРОВАТЬ 2: Это не включая неправильный заголовок. Я подтвердил это, используя cpp
, g++ -E
и переименовывая macros.h
в foobarmacros.h