Ответ 1
Есть предложение по вопросу под названием Forward declarations of nested classes
P0289R0. Однако, как вы можете видеть из последнего Отчета о поездке: Совещание по стандартам С++ в Джэксонвилле, февраль 2016 года, это предложение зависело от предложений, для которых предлагается дальнейшая работа. Я цитирую вердикт комитета (Emphasis Mine):
Это позволит появляться в заголовке такие вещи, как
X::A*
без требуя определения дляX
, чтобы также отображаться в заголовке (предварительные объявленияX
иX::A
будут достаточными). EWG обнаружила, что случай использования, поскольку в настоящее время существует множество определений классов для отображаются в заголовках только потому, что интерфейсы, определенные в заголовке, используют указатели или ссылки на вложенные классы типа. Несколько деталей все еще необходимо разработать. (Например, что произойдет, если определениеX
не появляется ни в одной другой единицы перевода (TU)? Что произойдет, если определениеX
появится в другом TU, но не определить вложенныйclass A
? Что произойдет, если он определит вложенный класс А, но его личное? Ответ на некоторые или все из них, возможно, должен быть "плохо сформирован, не требуется диагностика", поскольку диагностика ошибок этот тип потребует значительной поддержки компоновщика.)