Ich habe diese Dateien: -Template-Spezialisierung in einer anderen Datei C++. Welche Version wird
1.H: -
#include <iostream>
using namespace std;
template <typename A>
void f() {
cout<<"generic\n";
}
1.cpp: -
#include "1.h"
template <>
void f<int>() {
cout<<"for ints only\n";
}
main.cpp: -
#include "1.h"
int main() {
f<int>();
return 0;
}
Nun kompiliere ich und führe diese mit g ++ so aus: -
g++ -c 1.cpp -o 1.o
g++ main.cpp 1.o
./a.out
Und ich: -
for ints only
Auf der anderen Seite, ich habe es mit icpc wie folgt zusammenstellen: -
icpc -c 1.cpp -o 1.o
icpc main.cpp 1.o
./a.out
Und ich: -
generic
Was sagt der C++ Standard dazu? Ist irgendein Compiler "richtig" und der andere "falsch" oder ist der Standard in dieser Frage mehrdeutig und beide sind "richtig"?
ich _g glauben würde ++ _ hier ist, aber die undefinierten Verhalten Länder sind schwierig ... –
In den beredten Worten der Sprache C++ Standard: Wenn Sie eine Spezialisierung Schreiben/vorsichtig über seine Lage sein/oder um es zu kompilieren, wird ein solcher Versuch sein, um seine Selbstverbrennung anzuzünden. –
@ K-ballo Das würde ich auch glauben. Aber ich hätte gerne einen Zeiger auf eine autoritative Quelle, die dies auf die eine oder andere Weise angibt. – owagh