Ich bin ein extrem seltsames Problem in einem frischen OSX 10.4.11 + Xcode 2.5 Installation erleben. Ich habe es auf einen minimalen Testfall reduziert. Hier ist test.cpp:
#include "macros.h"
int main (void)
{
return 1;
}
Und hier ist 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__
Dies kompiliert und funktioniert einwandfrei, wenn sich beide Dateien im selben Verzeichnis befinden. JEDOCH, wenn ich macros.h in /usr/include/gfc2 ablege (es ist Teil einer benutzerdefinierten Bibliothek, die ich verwende) und das #include in test.cpp ändere, schlägt die Kompilierung mit diesem Fehler fehl:
/usr/include/gfc2/macros.h:4: error: template with C linkage
Ich habe diesen Fehler recherchiert und die meisten Kommentare deuten auf ein "dangling extern C" hin, was überhaupt nicht der Fall zu sein scheint.
Ich bin hier völlig ratlos. Nimmt g++ aus irgendeinem Grund an, dass alles in /usr/include/gfc2
C ist, obwohl es in einer .cpp-Datei enthalten ist, in der nirgends extern "C" steht?
Irgendwelche Ideen?
EDIT : Es wird kompiliert, wenn ich den vollständigen Pfad in der #include
, d.h. #include "/usr/include/gfc2/macros.h"
EDIT2 : Es ist nicht die falsche Kopfzeile enthalten. Ich habe dies überprüft mit cpp
, g++ -E
und Umbenennung macros.h
a foobarmacros.h