Il seguente codice sembra funzionare correttamente su Clang ++ e GCC:std :: vector in avanti tipo dichiarato
#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();
}
Quando il membro di dati std::vector<A>
è dichiarato, A
è ancora un tipo incompleto. Lo stesso quando si utilizza std::vector<B>
e B
è stato inoltrato solo con class B;
. Dovrebbe funzionare con std::vector
poiché contiene solo un puntatore a A
.
È garantito il funzionamento o il comportamento non definito?
In realtà, la carta accettata per C++ 17 è stata accettata con solo 'std :: list',' std :: forward_list' e 'std :: vector' in modo che GCC, Clang e MSVC siano conformi fuori dalla scatola . – Morwenn