This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++17 status.
in_place_t check for optional::optional(U&&) should decay USection: 22.5.3.2 [optional.ctor] Status: C++17 Submitter: Tim Song Opened: 2016-12-13 Last modified: 2020-09-06
Priority: 0
View all other issues in [optional.ctor].
View all issues with C++17 status.
Discussion:
As in_place_t is a normal tag type again, we need to decay U before doing the is_same_v check.
[2017-01-27 Telecon]
Priority 0
Proposed resolution:
This wording is relative to N4618.
Edit 22.5.3.2 [optional.ctor] as indicated:
template <class U = T> EXPLICIT constexpr optional(U&& v);[…]
-22- Remarks: IfT's selected constructor is aconstexprconstructor, this constructor shall be aconstexprconstructor. This constructor shall not participate in overload resolution unlessis_constructible_v<T, U&&>istrue,is_same_v<decay_t<U>, in_place_t>isfalse, andis_same_v<optional<T>, decay_t<U>>isfalse. The constructor is explicit if and only ifis_convertible_v<U&&, T>isfalse.