Компилятор дивергенции, как получить доступ к частному конструктору вложенного класса? [закрыто]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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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