Подтвердить что ты не робот

Будет ли std:: optional быть тривиально-скопируемым типом, если содержащийся тип является тривиально-скопируемым типом

Если тип T в std:: optional является тривиально копируемым типом, std:: optional будет тривиально скопирован. Я спрашиваю, как я хотел бы использовать его в атомарном, так что справедливо для некоторого тривиально-скопируемого типа T

std::atomic<std::optional<T>>
4b9b3361

Ответ 1

Конструктор копирования задается как:

optional(const optional<T>& rhs);
3 Требуется: is_copy_constructible_v<T> - true.
4 Эффекты: Если rhs содержит значение, инициализирует содержащееся значение, как будто direct-non-list-initializing объект типа T с выражением *rhs.
5 Постусловие: bool(rhs) == bool(*this).
6 Броски: любое исключение, созданное выбранным конструктором T.

Ничто здесь не требует, чтобы optional тривиально можно было копировать, но по правилу as-if ничего здесь не мешает реализации от выбора сделать это. Например, в реализации libstdС++ optional<T> не является тривиально скопируемым для любого T.

Единственное явное обсуждение тривиальности состоит в том, что если T тривиально разрушаемо, то optional<T> также будет тривиально разрушаемым.