Сообщение Re[9]: std::variant для вложенного класса от 04.12.2025 15:23
Изменено 04.12.2025 15:30 rg45
Re[9]: std::variant для вложенного класса
Здравствуйте, vopl, Вы писали:
R>>
Примерно понял, спасибо. Почитаю ещё документ повнимательнее.
PS. Хотя логика этих зависимостей мне не очень понятна. Получается, что в обрамляющем классе можно написать нечто такое, отчего вложенный класс не сможет быть default initializable.
R>>
R>>struct D
R>>{
R>> struct FService
R>> {
R>> int nFService_ = 0;
R>> };
R>> static_assert(sizeof(FService) != 0); // OK
V>// не является complete-class context так как не является ни одним из перечисленных вариантов в 10.1 - 10.6 отсюда https://timsong-cpp.github.io/cppwp/class.mem.general#10
R>> static_assert(std::default_initializable<FService>); // static assertion failed
V>// тут complete-class context это инициализирующее выражение "0" для FService::nFService_ (https://timsong-cpp.github.io/cppwp/class.mem.general#10.6), размещенное "within the member-specification", коим является static_assert (https://timsong-cpp.github.io/cppwp/class.mem.general#nt:member-declaration)
V>// этот complete-class context провоцирует дефолтный конструктор FService к удалению, тест default_initializable проваливается, получаем ложь и провал static_assert
R>>};
R>>Примерно понял, спасибо. Почитаю ещё документ повнимательнее.
PS. Хотя логика этих зависимостей мне не очень понятна. Получается, что в обрамляющем классе можно написать нечто такое, отчего вложенный класс не сможет быть default initializable.
Re[9]: std::variant для вложенного класса
Здравствуйте, vopl, Вы писали:
R>>
Примерно понял, спасибо. Почитаю ещё документ повнимательнее.
PS. Хотя логика этих зависимостей мне не очень понятна. Получается, что в обрамляющем классе можно написать нечто такое, отчего вложенный класс не сможет быть default initializable. В противном случае зачем эти сложности.
R>>
R>>struct D
R>>{
R>> struct FService
R>> {
R>> int nFService_ = 0;
R>> };
R>> static_assert(sizeof(FService) != 0); // OK
V>// не является complete-class context так как не является ни одним из перечисленных вариантов в 10.1 - 10.6 отсюда https://timsong-cpp.github.io/cppwp/class.mem.general#10
R>> static_assert(std::default_initializable<FService>); // static assertion failed
V>// тут complete-class context это инициализирующее выражение "0" для FService::nFService_ (https://timsong-cpp.github.io/cppwp/class.mem.general#10.6), размещенное "within the member-specification", коим является static_assert (https://timsong-cpp.github.io/cppwp/class.mem.general#nt:member-declaration)
V>// этот complete-class context провоцирует дефолтный конструктор FService к удалению, тест default_initializable проваливается, получаем ложь и провал static_assert
R>>};
R>>Примерно понял, спасибо. Почитаю ещё документ повнимательнее.
PS. Хотя логика этих зависимостей мне не очень понятна. Получается, что в обрамляющем классе можно написать нечто такое, отчего вложенный класс не сможет быть default initializable. В противном случае зачем эти сложности.