Declaración de reenvío con unique_ptr? [duplicar

Esta pregunta ya tiene una respuesta aquí:

Is std :: unique_ptr <T> requerido para conocer la definición completa de T? 7 respuestas

Me ha resultado útil utilizar la declaración directa de clases en combinación constd::unique_ptr como en el siguiente código. Se compila y funciona con GCC, pero todo parece extraño, y me pregunto si este es un comportamiento estándar (es decir, requerido por el estándar). Como B no es un tipo completo cuando declaro elunique_ptr.

A.hpp
#include <memory>

class B;

class A {
    std::unique_ptr<B> myptr;
    // B::~B() can't be seen from here
public:
    ~A();
};
A.cpp
#include "B.hpp"
//B.hpp has to be included, otherwise it doesn't work.

A::~A() = default; // without this line, it won't compile 
// however, any destructor definiton will do.

Sospecho que esto tiene que ver con el destructor (y, por lo tanto, la necesidad de llamar al destructor deunique_ptr<B>) se define en una unidad de compilación específica (A.cpp).

Respuestas a la pregunta(1)

Su respuesta a la pregunta