У меня есть эти файлы:-
1.ч:-
#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;
}
Теперь я компилирую и запускаю их с помощью g++ вот так:-
g++ -c 1.cpp -o 1.o
g++ main.cpp 1.o
./a.out
И я получаю:-
for ints only
С другой стороны, я компилирую его с помощью icpc вот так:-
icpc -c 1.cpp -o 1.o
icpc main.cpp 1.o
./a.out
И я получаю:-
generic
Что об этом говорит стандарт С++? Является ли какой-либо один компилятор «правильным», а другой «неправильным», или стандарт неоднозначен в этом вопросе, и оба «правы»?