No es este código:declaración Forward de la clase utilizada en función de plantilla no es compilada por sonido metálico ++
class A;
template <class T>
void fun() {
A a;
}
class A {
public:
A() { }
};
int main() {
fun<int>();
return 0;
}
g ++ 4,5 y g ++ 4.7 compila esto sin error. Pero clang ++ 3.2 (troncal) da este error:
main.cpp:5:6: error: variable has incomplete type 'A'
A a;
^
main.cpp:1:7: note: forward declaration of 'A'
class A;
^
¿Qué compilador está en ese momento de acuerdo con el estándar C++?
Como intenta crear un objeto de tipo 'A', el compilador debe conocer su tamaño, que no puede conocer sin haber visto la definición completa, así que clang estaría aquí (pero no tengo la referencia estándar) . –
¿Hay algún cambio proporcionado por clang para compilar tal código? – Sashank