我有这些文件:-
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;
}
现在,我像这样用 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
C++ 标准对此有何评论?是任何一个编译器“正确”而另一个“错误”还是标准在这个问题上模棱两可并且两者都是“正确的”?