Идиома pimpl, насколько я могу судить, скрывает частную реализацию за заранее объявленным именем символа, чтобы его можно было объявить и использовать в частном модуле cpp.
Пример: https://cpppatterns.com/patterns/pimpl.html
Насколько я могу судить, поскольку класс не использует pimpl, он должен знать о своей структуре (размер, выравнивание), pimpl должен быть косвенным через какой-то указатель.
(или выделяется как блок достаточного размера, а затем перемещается/создается в место, где он позже интерпретируется приведением.)
Будущая спецификация модулей как-то решает эту проблему?