Declaração de encaminhamento de objetos com contêineres STL

Considere o seguinte trecho de código, em que a primeira linha serve apenas como declaração direta

 class A;

seguido pela definição de nova classe

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

a linha 1 e a linha 2 parecem estar bem com a declaração de encaminhamento (que pode me dizer que esses contêineres usam o tipo de ponteiro de implementação) onde, como a linha 3 parece não compilar no VS2012.

Minha pergunta é que o comportamento ditado pelo padrão ou específico para o compilador que estou usando?

obrigado

questionAnswers(3)

yourAnswerToTheQuestion