Re[9]: std::variant для вложенного класса
От: rg45 СССР  
Дата: 04.12.25 15:23
Оценка:
Здравствуйте, vopl, Вы писали:

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. В противном случае зачем эти сложности.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 04.12.2025 15:30 rg45 . Предыдущая версия . Еще …
Отредактировано 04.12.2025 15:29 rg45 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.