Будет ли С++ 17 разрешать прямое объявление вложенных классов?

Не уверен, где спросить (не стесняйтесь закрывать это, если это неподходящий вопрос), но я ничего не нашел в этом в предложениях на С++ 17, а this или this упоминает об этом при работе с вложенным добавлением пространства имен в С++.

Так что в настоящее время это единственный вариант:

class A 
{
public: 
    class B; //forward-declared INSIDE class/namespace
};

class A::B //defined outside
{
};

Будет ли это возможным в С++ 17?

class A::B; //forward declared NESTED outside of parent class/namespace

class C
{
    A::B *b;
};

а затем либо это (1) (как представляется, предложение вложенных определений имен имен)

class A::B //definition of A::B without defining A
{

};

или это (2)

class A
{
public:
    class A::B
    {

    };
};

или это [3]

class A
{
public:
    class B;
};

class A::B
{
};

Я подозреваю, что определение A::B без определения A сначала может не работать (хотя предложение, похоже, позволяет это).

Ответы

Ответ 1

Есть предложение по вопросу под названием Forward declarations of nested classes P0289R0. Однако, как вы можете видеть из последнего Отчета о поездке: Совещание по стандартам С++ в Джэксонвилле, февраль 2016 года, это предложение зависело от предложений, для которых предлагается дальнейшая работа. Я цитирую вердикт комитета (Emphasis Mine):

Это позволит появляться в заголовке такие вещи, как X::A* без требуя определения для X, чтобы также отображаться в заголовке (предварительные объявления X и X::A будут достаточными). EWG обнаружила, что случай использования, поскольку в настоящее время существует множество определений классов для отображаются в заголовках только потому, что интерфейсы, определенные в заголовке, используют указатели или ссылки на вложенные классы типа. Несколько деталей все еще необходимо разработать. (Например, что произойдет, если определение X не появляется ни в одной другой единицы перевода (TU)? Что произойдет, если определение X появится в другом TU, но не определить вложенный class A? Что произойдет, если он определит вложенный класс А, но его личное? Ответ на некоторые или все из них, возможно, должен быть "плохо сформирован, не требуется диагностика", поскольку диагностика ошибок этот тип потребует значительной поддержки компоновщика.)