Компилятор дивергенции, как получить доступ к частному конструктору вложенного класса? [закрыто]C++

Программы на C++. Форум разработчиков
Anonymous
Компилятор дивергенции, как получить доступ к частному конструктору вложенного класса? [закрыто]

Сообщение Anonymous »

Вопрос: < /h2>
Согласно N4713#14.7, а затем члены класса в прилагающемся классе не имеют особого доступа к частным членам вложенного класса. Противоречит ли это поведение стандарт? и случай 6 с этим объявлением должно пройти?// 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{};
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... onstructor

Вернуться в «C++»