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

R>Здравствуйте, vopl, Вы писали:


R>>>Вот если бы ещё получить ссылку на соответствующий пункт стандарта, было бы совсем здорово.


V>>https://timsong-cpp.github.io/cppwp/class.mem.general#note-4


R>А как тогда объяснить это:


R>https://godbolt.org/z/oPo3o5ME7


R>
R>struct D
R>{
R>    struct FService
R>    {
R>        int  nFService_ = 0;
R>    };
R>    static_assert(sizeof(FService) != 0);  // OK
// не является 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
// тут 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)
// этот complete-class context провоцирует дефолтный конструктор FService к удалению, тест default_initializable проваливается, получаем ложь и провал static_assert
R>};
R>


R>Выходит, класс "достаточно полный" для sizeof, но недостаточно полный для того, чтобы понять, что он default infitializable. Это как так?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.