Объявление не встроенного статического члена данных в своем классе
определение не является определением и может быть неполного типа
чем резюме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 ++?
Задача ещё не решена.
Других решений пока нет …