Por que uma declaração direta não pode ser usada para um std :: vector?

Se eu criar uma classe assim:

// B.h
#ifndef _B_H_
#define _B_H_

class B
{
private:
    int x;
    int y;
};

#endif // _B_H_

e use-o assim:

// main.cpp
#include <iostream>
#include <vector>

class B; // Forward declaration.

class A
{
public:
    A() {
        std::cout << v.size() << std::endl;
    }

private:
    std::vector<B> v;
};

int main()
{
    A a;
}

O compilador falha ao compilarmain.cpp. Agora a solução que eu sei é#include "B.h", mas estou curioso para saber por que isso falha. Nemg++ ouclAs mensagens de erro foram muito esclarecedoras neste assunto.

questionAnswers(8)

yourAnswerToTheQuestion