Skip to content

Commit 8c60752

Browse files
jwakelytkoeppe
authored andcommitted
[optional.ctor], [expected.object.ctor] Add converts-from-any-cvref
1 parent 5ef31f3 commit 8c60752

File tree

1 file changed

+24
-49
lines changed

1 file changed

+24
-49
lines changed

source/utilities.tex

Lines changed: 24 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -3319,6 +3319,18 @@
33193319

33203320
\rSec3[optional.ctor]{Constructors}
33213321

3322+
\pnum
3323+
The exposition-only variable template \exposid{converts-from-any-cvref}
3324+
is used by some constructors for \tcode{optional}.
3325+
\begin{codeblock}
3326+
template<class T, class W>
3327+
constexpr bool @\exposid{converts-from-any-cvref}@ = // \expos
3328+
disjunction_v<is_constructible<T, W&>, is_convertible<W&, T>,
3329+
is_constructible<T, W>, is_convertible<W, T>,
3330+
is_constructible<T, const W&>, is_convertible<const W&, T>,
3331+
is_constructible<T, const W>, is_convertible<const W, T>>;
3332+
\end{codeblock}
3333+
33223334
\indexlibraryctor{optional}%
33233335
\begin{itemdecl}
33243336
constexpr optional() noexcept;
@@ -3493,15 +3505,8 @@
34933505
\pnum
34943506
\constraints
34953507
\begin{itemize}
3496-
\item \tcode{is_constructible_v<T, const U\&>} is \tcode{true},
3497-
\item \tcode{is_constructible_v<T, optional<U>\&>} is \tcode{false},
3498-
\item \tcode{is_constructible_v<T, optional<U>\&\&>} is \tcode{false},
3499-
\item \tcode{is_constructible_v<T, const optional<U>\&>} is \tcode{false},
3500-
\item \tcode{is_constructible_v<T, const optional<U>\&\&>} is \tcode{false},
3501-
\item \tcode{is_convertible_v<optional<U>\&, T>} is \tcode{false},
3502-
\item \tcode{is_convertible_v<optional<U>\&\&, T>} is \tcode{false},
3503-
\item \tcode{is_convertible_v<const optional<U>\&, T>} is \tcode{false}, and
3504-
\item \tcode{is_convertible_v<const optional<U>\&\&, T>} is \tcode{false}.
3508+
\item \tcode{is_constructible_v<T, const U\&>} is \tcode{true}, and
3509+
\item \tcode{\exposid{converts-from-any-cvref}<T, optional<U>>} is \tcode{false}.
35053510
\end{itemize}
35063511

35073512
\pnum
@@ -3534,15 +3539,8 @@
35343539
\pnum
35353540
\constraints
35363541
\begin{itemize}
3537-
\item \tcode{is_constructible_v<T, U>} is \tcode{true},
3538-
\item \tcode{is_constructible_v<T, optional<U>\&>} is \tcode{false},
3539-
\item \tcode{is_constructible_v<T, optional<U>\&\&>} is \tcode{false},
3540-
\item \tcode{is_constructible_v<T, const optional<U>\&>} is \tcode{false},
3541-
\item \tcode{is_constructible_v<T, const optional<U>\&\&>} is \tcode{false},
3542-
\item \tcode{is_convertible_v<optional<U>\&, T>} is \tcode{false},
3543-
\item \tcode{is_convertible_v<optional<U>\&\&, T>} is \tcode{false},
3544-
\item \tcode{is_convertible_v<const optional<U>\&, T>} is \tcode{false}, and
3545-
\item \tcode{is_convertible_v<const optional<U>\&\&, T>} is \tcode{false}.
3542+
\item \tcode{is_constructible_v<T, U>} is \tcode{true}, and
3543+
\item \tcode{\exposid{converts-from-any-cvref}<T, optional<U>>} is \tcode{false}.
35463544
\end{itemize}
35473545

35483546
\pnum
@@ -3751,14 +3749,7 @@
37513749
\begin{itemize}
37523750
\item \tcode{is_constructible_v<T, const U\&>} is \tcode{true},
37533751
\item \tcode{is_assignable_v<T\&, const U\&>} is \tcode{true},
3754-
\item \tcode{is_constructible_v<T, optional<U>\&>} is \tcode{false},
3755-
\item \tcode{is_constructible_v<T, optional<U>\&\&>} is \tcode{false},
3756-
\item \tcode{is_constructible_v<T, const optional<U>\&>} is \tcode{false},
3757-
\item \tcode{is_constructible_v<T, const optional<U>\&\&>} is \tcode{false},
3758-
\item \tcode{is_convertible_v<optional<U>\&, T>} is \tcode{false},
3759-
\item \tcode{is_convertible_v<optional<U>\&\&, T>} is \tcode{false},
3760-
\item \tcode{is_convertible_v<const optional<U>\&, T>} is \tcode{false},
3761-
\item \tcode{is_convertible_v<const optional<U>\&\&, T>} is \tcode{false},
3752+
\item \tcode{\exposid{converts-from-any-cvref}<T, optional<U>>} is \tcode{false},
37623753
\item \tcode{is_assignable_v<T\&, optional<U>\&>} is \tcode{false},
37633754
\item \tcode{is_assignable_v<T\&, optional<U>\&\&>} is \tcode{false},
37643755
\item \tcode{is_assignable_v<T\&, const optional<U>\&>} is \tcode{false}, and
@@ -3813,14 +3804,7 @@
38133804
\begin{itemize}
38143805
\item \tcode{is_constructible_v<T, U>} is \tcode{true},
38153806
\item \tcode{is_assignable_v<T\&, U>} is \tcode{true},
3816-
\item \tcode{is_constructible_v<T, optional<U>\&>} is \tcode{false},
3817-
\item \tcode{is_constructible_v<T, optional<U>\&\&>} is \tcode{false},
3818-
\item \tcode{is_constructible_v<T, const optional<U>\&>} is \tcode{false},
3819-
\item \tcode{is_constructible_v<T, const optional<U>\&\&>} is \tcode{false},
3820-
\item \tcode{is_convertible_v<optional<U>\&, T>} is \tcode{false},
3821-
\item \tcode{is_convertible_v<optional<U>\&\&, T>} is \tcode{false},
3822-
\item \tcode{is_convertible_v<const optional<U>\&, T>} is \tcode{false},
3823-
\item \tcode{is_convertible_v<const optional<U>\&\&, T>} is \tcode{false},
3807+
\item \tcode{\exposid{converts-from-any-cvref}<T, optional<U>>} is \tcode{false},
38243808
\item \tcode{is_assignable_v<T\&, optional<U>\&>} is \tcode{false},
38253809
\item \tcode{is_assignable_v<T\&, optional<U>\&\&>} is \tcode{false},
38263810
\item \tcode{is_assignable_v<T\&, const optional<U>\&>} is \tcode{false}, and
@@ -7377,6 +7361,11 @@
73777361

73787362
\rSec3[expected.object.cons]{Constructors}
73797363

7364+
\pnum
7365+
The exposition-only variable template \exposid{converts-from-any-cvref}
7366+
defined in \ref{optional.ctor}
7367+
is used by some constructors for \tcode{expected}.
7368+
73807369
\indexlibraryctor{expected}%
73817370
\begin{itemdecl}
73827371
constexpr expected();
@@ -7515,21 +7504,7 @@
75157504
\item
75167505
\tcode{is_constructible_v<E, GF>} is \tcode{true}; and
75177506
\item
7518-
\tcode{is_constructible_v<T, expected<U, G>\&>} is \tcode{false}; and
7519-
\item
7520-
\tcode{is_constructible_v<T, expected<U, G>>} is \tcode{false}; and
7521-
\item
7522-
\tcode{is_constructible_v<T, const expected<U, G>\&>} is \tcode{false}; and
7523-
\item
7524-
\tcode{is_constructible_v<T, const expected<U, G>>} is \tcode{false}; and
7525-
\item
7526-
\tcode{is_convertible_v<expected<U, G>\&, T>} is \tcode{false}; and
7527-
\item
7528-
\tcode{is_convertible_v<expected<U, G>\&\&, T>} is \tcode{false}; and
7529-
\item
7530-
\tcode{is_convertible_v<const expected<U, G>\&, T>} is \tcode{false}; and
7531-
\item
7532-
\tcode{is_convertible_v<const expected<U, G>\&\&, T>} is \tcode{false}; and
7507+
\tcode{\exposid{converts-from-any-cvref}<T, expected<U, G>>} is \tcode{false}; and
75337508
\item
75347509
\tcode{is_constructible_v<unexpected<E>, expected<U, G>\&>} is \tcode{false}; and
75357510
\item

0 commit comments

Comments
 (0)