// Case 0: all pass
class enclosing
{
class nested {
nested() = default;
};
public:
enclosing() : member{} {};
nested member;
};
int main()
{
enclosing e{};
}
< /code>
// Case 1: all pass
class enclosing
{
class nested {
friend class enclosing;
nested() = default;
};
public:
enclosing() {};
nested member;
};
int main()
{
enclosing e{};
}
< /code>
// Case 2: All fail
class enclosing
{
class nested {
// friend class enclosing;
nested() = default;
};
public:
enclosing(){};
nested member;
};
int main()
{
enclosing e{};
}
< /code>
// Case 3: C++17 all pass, C++20 All fail
class enclosing
{
class nested {
// friend class enclosing;
nested() = default;
};
public:
enclosing() : member{} {};
nested member;
};
int main()
{
enclosing e{};
}
< /code>
// Case 4: C++17 all pass except
// clang warning but clang returned 0, C++20 All fail
class enclosing
{
class nested {
// friend class enclosing;
nested() = default;
};
public:
enclosing() = default;
nested member;
};
int main()
{
enclosing e{};
}
< /code>
// Case 5: C++17 all pass, C++20 all fail
class enclosing
{
class nested {
// friend class enclosing;
nested() = default;
};
public:
nested member;
};
int main()
{
enclosing e{};
}
< /code>
// Case 6: C++17 all pass, C++20 MSVC pass, clang gcc fail
class enclosing
{
class nested {
friend class enclosing;
nested() = default;
};
public:
nested member;
};
int main()
{
enclosing e{};
}
< /code>
// Case 7: All pass
class enclosing
{
class nested {
friend class enclosing;
nested() = default;
};
public:
static nested member;
};
enclosing::nested enclosing::member{};
int main()
{
}
< /code>
Вопросы: < /p>
, как упомянуто в CppReference#nest_types: < /p>
Вложенные классные объявления подчиняются спецификаторам доступа членов, частный класс не может быть назван вне сферы действия класса прилагающего /> < /blockquote>
- Дело 7 должно быть незаконным? < /li>
< /ol>
, как описано в N4713 и позже. Участники класса в приложении не имеют особого доступа к членам вложенного класса; Обычные правила доступа (пункт 14) подчиняются. И все случаи с этим должны быть лигал (случай 6)?
Подробнее здесь: https://stackoverflow.com/questions/797 ... onstructor
Мобильная версия