tengo estos archivos: -especialización de plantilla en otro archivo C++. ¿Qué versión Obtiene
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;
}
Ahora, compilo y corro estos con g ++ como este: -
g++ -c 1.cpp -o 1.o
g++ main.cpp 1.o
./a.out
Y consigo: -
for ints only
Por otro lado, puedo compilar con icpc así: -
icpc -c 1.cpp -o 1.o
icpc main.cpp 1.o
./a.out
Y consigo: -
generic
¿Qué dice el estándar C++ sobre esto? ¿Hay algún compilador "correcto" y el otro "incorrecto" o el estándar es ambiguo sobre este tema y ambos son "correctos"?
me creería _g _ ++ es aquí, pero las tierras comportamiento indefinido son difíciles ... –
En las elocuentes palabras del lenguaje estándar C++: Al escribir una especialización/ tener cuidado acerca de su ubicación/o para hacer que compile/será una prueba/como para encender su autoinmolación. –
@ K-ballo Eso es lo que yo también creo. Pero me gustaría un puntero a una fuente autorizada que lo diga de una manera u otra. – owagh