¿Por qué no se puede utilizar una declaración directa para un std :: vector?

Si creo una clase así:

// B.h
#ifndef _B_H_
#define _B_H_

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

#endif // _B_H_

y úsalo así:

// 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;
}

El compilador falla al compilarmain.cpp. Ahora la solución que sé es#include "B.h", pero tengo curiosidad por saber por qué falla. Ningunog++ oclLos mensajes de error fueron muy esclarecedores en este asunto.

Respuestas a la pregunta(8)

Su respuesta a la pregunta