Declaración directa de objetos con contenedores STL

Considere el siguiente fragmento de código, donde la primera línea sirve solo como declaración directa

 class A;

seguido de definir una nueva clase

class B
{
 vector<A> Av;  //line 1
 map<int, A> Am;  //line 2
 pair<int, A> Ap; //line 3
};

la línea 1 y la línea 2 parecen estar bien con la declaración directa (que puede decirme que esos contenedores usan el tipo de implementación de puntero) donde la línea 3 no parece compilarse en VS2012.

Mi pregunta es ese comportamiento dictado por el estándar o específico del compilador que estoy usando.

Gracias

Respuestas a la pregunta(3)

Su respuesta a la pregunta