El problema no es que no pueda declarar hacia adelante una clase de plantilla. Sí, necesita conocer todos los parámetros de la plantilla y sus valores predeterminados para poder declararlo correctamente:
namespace std {
template<class T, class Allocator = std::allocator<T>>
class list;
}
Pero hacer incluso una declaración de avance namespace std
está explícitamente prohibido por el estándar: lo único que se le permite ingresar std
es una especialización de plantilla , comúnmente std::less
en un tipo definido por el usuario. Alguien más puede citar el texto relevante si es necesario.
Solo #include <list>
y no te preocupes por eso.
Ah, por cierto, cualquier nombre que contenga guiones bajos dobles está reservado para su uso por la implementación, por lo que debe usar algo como en TEST_H
lugar de __TEST__
. No va a generar una advertencia o un error, pero si su programa tiene un choque con un identificador definido por la implementación, no se garantiza que se compile o ejecute correctamente: está mal formado . También están prohibidos los nombres que comienzan con un guión bajo seguido de una letra mayúscula, entre otros. En general, no comience las cosas con guiones bajos a menos que sepa con qué magia está tratando.
std::allocator<T>