Mam te pliki: -Specjalizacja szablonów w innym pliku C++. Która wersja dostaje
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;
}
Teraz kompiluję i uruchamiam te z g ++ w ten sposób: -
g++ -c 1.cpp -o 1.o
g++ main.cpp 1.o
./a.out
I otrzymujemy: -
for ints only
Z drugiej strony, ja go skompilować z ICPC tak: -
icpc -c 1.cpp -o 1.o
icpc main.cpp 1.o
./a.out
I otrzymujemy: -
generic
Co mówi o tym standard C++? Czy któryś z kompilatorów jest "prawidłowy", a drugi "zły", czy jest standardowy niejednoznaczny w tej kwestii i oba są "prawidłowe"?
Chciałbym wierzyć _G ++ _ jest tutaj, ale nieokreślone ziemie zachowania są trudne ... –
W wymowne słowa standardu języka C++: Podczas pisania specjalizacji/być ostrożny o jego lokalizacji/albo sprawić, że będzie to taka próba/by rozpalić jej samopodpalenie. –
@ K-ballo W to też wierzę. Ale chciałbym wskazówkę do autorytatywnego źródła, które mówi w ten czy inny sposób. – owagh