Declaração forward com unique_ptr? [duplicado

Esta pergunta já tem uma resposta aqui:

É necessário std :: unique_ptr <T> para conhecer a definição completa de T? respostas

Eu achei útil usar a declaração direta de classes em combinação comstd::unique_ptr como no código abaixo. Ele compila e funciona com o GCC, mas a coisa toda parece meio estranha, e me pergunto se esse é o comportamento padrão (ou seja, exigido pelo padrão)? Como B não é um tipo completo quando declaro ounique_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.

Suspeito que isso esteja relacionado ao destruidor (e, portanto, à necessidade de chamar o destruidor deunique_ptr<B>) é definido em uma unidade de compilação específica (A.cpp

questionAnswers(1)

yourAnswerToTheQuestion