Skip to content

Commit 13b42a2

Browse files
burblebeetkoeppe
authored andcommitted
LWG4026 Assignment operators of std::expected should propagate triviality
Fixes NB US 135-216, US 136-217 (C++26 CD).
1 parent 4fa9e57 commit 13b42a2

1 file changed

Lines changed: 36 additions & 0 deletions

File tree

source/utilities.tex

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8736,6 +8736,17 @@
87368736
\tcode{is_nothrow_move_constructible_v<T> || is_nothrow_move_constructible_v<E>}
87378737
is \tcode{true}.
87388738
\end{itemize}
8739+
8740+
\pnum
8741+
This operator is trivial if:
8742+
\begin{itemize}
8743+
\item \tcode{is_trivially_copy_constructible_v<T>} is \tcode{true}, and
8744+
\item \tcode{is_trivially_copy_assignable_v<T>} is \tcode{true}, and
8745+
\item \tcode{is_trivially_destructible_v<T>} is \tcode{true}, and
8746+
\item \tcode{is_trivially_copy_constructible_v<E>} is \tcode{true}, and
8747+
\item \tcode{is_trivially_copy_assignable_v<E>} is \tcode{true}, and
8748+
\item \tcode{is_trivially_destructible_v<E>} is \tcode{true}.
8749+
\end{itemize}
87398750
\end{itemdescr}
87408751

87418752
\indexlibrarymember{operator=}{expected}%
@@ -8793,6 +8804,17 @@
87938804
is_nothrow_move_assignable_v<T> && is_nothrow_move_constructible_v<T> &&
87948805
is_nothrow_move_assignable_v<E> && is_nothrow_move_constructible_v<E>
87958806
\end{codeblock}
8807+
8808+
\pnum
8809+
This operator is trivial if:
8810+
\begin{itemize}
8811+
\item \tcode{is_trivially_move_constructible_v<T>} is \tcode{true}, and
8812+
\item \tcode{is_trivially_move_assignable_v<T>} is \tcode{true}, and
8813+
\item \tcode{is_trivially_destructible_v<T>} is \tcode{true}, and
8814+
\item \tcode{is_trivially_move_constructible_v<E>} is \tcode{true}, and
8815+
\item \tcode{is_trivially_move_assignable_v<E>} is \tcode{true}, and
8816+
\item \tcode{is_trivially_destructible_v<E>} is \tcode{true}.
8817+
\end{itemize}
87968818
\end{itemdescr}
87978819

87988820
\indexlibrarymember{operator=}{expected}%
@@ -9940,6 +9962,13 @@
99409962
This operator is defined as deleted unless
99419963
\tcode{is_copy_assignable_v<E>} is \tcode{true} and
99429964
\tcode{is_copy_constructible_v<E>} is \tcode{true}.
9965+
9966+
\pnum
9967+
This operator is trivial if
9968+
\tcode{is_trivially_copy_constructible_v<E>},
9969+
\tcode{is_trivially_copy_assigna\-ble_v<E>}, and
9970+
\tcode{is_trivially_destructible_v<E>}
9971+
are all \tcode{true}.
99439972
\end{itemdescr}
99449973

99459974
\indexlibrarymember{operator=}{expected<void>}%
@@ -9979,6 +10008,13 @@
997910008
\remarks
998010009
The exception specification is equivalent to
998110010
\tcode{is_nothrow_move_constructible_v<E> \&\& is_nothrow_move_assignable_v<E>}.
10011+
10012+
\pnum
10013+
This operator is trivial if
10014+
\tcode{is_trivially_move_constructible_v<E>},
10015+
\tcode{is_trivially_move_assigna\-ble_v<E>}, and
10016+
\tcode{is_trivially_destructible_v<E>}
10017+
are all \tcode{true}.
998210018
\end{itemdescr}
998310019

998410020
\indexlibrarymember{operator=}{expected<void>}%

0 commit comments

Comments
 (0)