Следующий код, похоже, корректно работает с Clang++ и GCC:
#include <vector>
class A {
private:
int i;
std::vector<A> children;
public:
A& add();
};
A& A::add() { children.emplace_back(); return children.back(); }
int main() {
A a;
A& a2 = a.add();
}
Когда объявлен член данных std::vector<A>
, A
по-прежнему является неполным. То же самое, когда использование std::vector<B>
и B
было объявлено только с помощью class B;
.
Он должен работать с std::vector
, поскольку он содержит только указатель на A
.
Гарантировано ли это работать, или undefined поведение?