Мне было любопытно, было ли возможно создать два класса, каждый из которых содержит std::vector
другого. Мое первое предположение заключалось в том, что это было бы невозможно, потому что std::vector
требует полного типа, а не только прямого объявления.
#include <vector>
class B;
class A { std::vector<B> b; };
class B { std::vector<A> a; };
Я бы подумал, что объявление std::vector<B>
приведет к немедленному сбою, потому что B
имеет неполный тип в этой точке. Тем не менее, он успешно компилируется под gcc и clang без каких-либо предупреждений. Почему это не вызывает ошибку?