Переслать декларацию с unique_ptr? [Дубликат]

На этот вопрос уже есть ответ:

Требуется ли std :: unique_ptr <T> знать полное определение T? 7 ответов

Я считаю полезным использовать предварительное объявление классов в сочетании сstd::unique_ptr как в коде ниже. Он компилируется и работает с GCC, но все это выглядит довольно странно, и мне интересно, является ли это стандартным поведением (т.е. требуется стандартом)? Поскольку B не полный тип, когда я объявляюunique_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.

Я подозреваю, что это связано с деструктором (и, следовательно, с необходимостью вызвать деструкторunique_ptr<B>) определяется в определенной единице компиляции (A.cpp).