специализация шаблона в другом файле c++. Какая версия получает

У меня есть эти файлы:-

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

Что об этом говорит стандарт С++? Является ли какой-либо один компилятор «правильным», а другой «неправильным», или стандарт неоднозначен в этом вопросе, и оба «правы»?

6
задан James McNellis 21 June 2012 в 21:55
поделиться