Удаленные конструкторы все еще считаются тривиальными?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Удаленные конструкторы все еще считаются тривиальными?

Сообщение Anonymous »

Рассмотрение следующего класса: < /p>

Код: Выделить всё

#include 

struct S
{
S(const S &) = delete;
S(S &&) = delete;
S & operator=(const S &) = delete;
S & operator=(S &&) = delete;
};
< /code>

из стандарта C ++  (11.2 §1) < /em>: < /p>

тривиально копируемый класс - это класс. или переместить оператор назначения  ([special], [class.copy.ctor], [class.copy.assign]), 
[*] где каждый подходящий конструктор копии, конструктор перемещения, оператор назначения копий и оператор для перевода. ([class.dtor]).


  Mone   
Затем, за  (11.4.5.3 §11) : 


Trivial [b], если это не предоставлено пользователем [/b] и если

[*] class x не имеет виртуальных функций ([class.virtual]), и нет виртуальных базовых классов ([class.mi]), и
, выбранное для копирования/перемещение каждого подборона-класса. Нестатический элемент данных x, который имеет тип класса (или их массив), конструктор, выбранный для копирования/перемещения этого члена, является тривиальным;
в противном случае конструктор копии/перемещение нетривиально. />  Если я что-то не пропустил, приведенный выше класс не следует считать тривиально копируемым в соответствии с (мое понимание) стандарта.static_assert(std::is_trivially_copyable_v);
Живой пример
Если это ошибка, мне кажется маловероятным, что оба компилятора будут иметь одну и ту же ошибку.
Следовательно, я предполагаю, что удаленные конструкторы не могут рассматриваться как пользовательские, которые могут сделать им, что они станут полями, которые будут подлежащими трюмам. /> Но ... я не могу найти нигде в стандарте, независимо от того, подтверждается ли это утверждение. < /p>

Подробнее здесь: https://stackoverflow.com/questions/796 ... as-trivial
Ответить

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

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

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

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

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