Удаленные конструкторы все еще считаются тривиальными?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]).


emphasis mine
Then, per (11.4.5.3 §11):

A copy/move constructor for class X is 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++»