Почему C ++ допускает объявление неполного типа в его собственном определении?

[Class.static.data] / 2:

Объявление не встроенного статического члена данных в своем классе
определение не является определением и может быть неполного типа
чем резюме void, …

Это означает, что это правильный код:

#include <iostream>
struct S
{
static S s;
};

S S::s;

int main()
{
std::cout << &(S::s) << '\n';
std::cout << &(S::S::s) << '\n';
}

Фрагмент выше печатает тот же адрес для &(S::s) а также &(S::S::s),

В чем причина разрешения такой конструкции в C ++?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]