El lenguaje C++ estándar establece los componentes de la plantilla siguiente en relación con la biblioteca estándar:En la declaración "std :: vector <X> f();", ¿es "std :: vector <X>" una instanciación?
Los efectos no están definidos ... si un tipo incompleto se utiliza como un argumento plantilla al crear instancias de un componente de la plantilla, a menos que se permita específicamente para ese componente (C++ 11 §17.6.4.8/2).
¿Los siguientes causan instanciación de la plantilla de clase std::vector
?
class X;
std::vector<X> f(); // Declaration only; we will define it when X is complete
Para hacer de otra manera, en la declaración de la función std::vector<X> f();
, es std::vector
instancia con el argumento X
? O bien, ¿std::vector<X>
no está instanciado hasta que f()
se utiliza o define?
Del mismo modo, ¿causa la creación de instancias de la plantilla de clase std::vector
?
class X;
typedef std::vector<X> XVector; // We will complete X before we use XVector
Mientras que yo uso std::vector
en estos ejemplos, la cuestión se aplica por igual a todas las plantillas.
Una buena respuesta proporcionará referencias al estándar de lenguaje C++.Busqué en Language Standard pero no pude encontrar una respuesta definitiva. –
Nunca he visto "indefinido" usado con parte del proceso de compilación antes ... –
¿Por qué quieres saber? –