Форвардное объявление объектов в контейнерах STL
Рассмотрим следующий фрагмент кода, где первая строка служит только как прямое объявление
class A;
с последующим определением нового класса
class B
{
vector<A> Av; //line 1
map<int, A> Am; //line 2
pair<int, A> Ap; //line 3
};
Строка 1 и строка 2, кажется, подходят для предварительного объявления (которое может сказать мне, что эти контейнеры используют тип указателя реализации), где строка 3 не компилируется в VS2012.
Мой вопрос заключается в том, что поведение диктуется стандартом или специфическим для компилятора, который я использую?
Спасибо