This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of New status.
optional<T&>::transform
Section: 22.5.4.7 [optional.ref.monadic] Status: New Submitter: Giuseppe D'Angelo Opened: 2025-07-15 Last modified: 2025-07-27
Priority: Not Prioritized
View all issues with New status.
Discussion:
In 22.5.4.7 [optional.ref.monadic] the specification of optional<T&>::transform
is missing an additional part of the Mandates: element compared to the primary template's
transform
(in 22.5.3.8 [optional.monadic] p8); that is, is missing to enforce that
the U
type is a valid contained type for optional
.
transform
to
use this definition. The fact that the same wording has not been applied to
optional<T&>::transform
as well looks like an oversight. I would
suggest to apply it.
Proposed resolution:
This wording is relative to this CD preview draft.
Modify 22.5.4.7 [optional.ref.monadic] as indicated:
template<class F> constexpr optional<remove_cv_t<invoke_result_t<F, T&>>> transform(F&& f) const;-4- Let
-5- Mandates:U
beremove_cv_t<invoke_result_t<F, T&>>
.U
is a valid contained type foroptional
. The declarationU u(invoke(std::forward<F>(f), *val ));is well-formed for some invented variable
u
.