Encaminhar declarar um contêiner STL?

É possível encaminhar declarar um contêiner STL em um arquivo de header? Por exemplo, pegue o seguinte código:

#include  class Foo { private: std::vector container_; ... }; 

Eu quero ser capaz de fazer algo assim:

 namespace std { template  class vector; } class Foo { private: std::vector container_; ... }; 

Isso pode ser feito?

Declarar vector no namespace std é um comportamento indefinido . Assim, seu código pode funcionar, mas também pode não funcionar, e o compilador não tem obrigação de informar quando sua tentativa não funcionar. Isso é uma aposta, e não sei se vale a pena evitar a inclusão de um header C ++ padrão.

Veja a seguinte discussão moderada de comp.std.c ++.

forward declarando std :: vector. Funciona, mas é legal e compatível com o padrão?

Eu não penso assim porque o compilador não teria como saber quanto espaço alocar para o object container_ . Na melhor das hipóteses você poderia fazer:

 std::vector *container_; 

e novo no construtor, já que o compilador sabe o tamanho de um ponteiro.

Além do que os outros disseram (exceto Adam Rosenfield), você pode achar útil saber que há uma maneira sancionada de declarar adiante iostreams e alguns modelos relacionados: O header (consulte http://msdn.microsoft). com / en-us / library / 1af12yty% 28VS.80% 29.aspx ). Seria útil se o padrão tivesse mais desses headers.