Created on 2021-10-23.00:00:00 last changed 34 months ago
Proposed resolution:
This wording is relative to N4901.
Modify [optional.specalg] as indicated:
template<class T> constexpr optional<decay_t<T>> make_optional(T&& v);-3-
ReturnsEffects: Equivalent to: return optional<decay_t<T>>(std::forward<T>(v));.
[ 2022-01-29; Reflector poll ]
Set priority to 3 after reflector poll.
Three std::make_optional overloads are specified in [optional.specalg]. The first one is specified by "Returns:" and the other two are specified by "Effects: Equivalent to:". According to [structure.specifications]/4, such uses of "Effects: Equivalent to:" propagate the Constraints specified for constructors. As the selected constructor for the first overload has "Constraints:" ([optional.ctor]/22), it seems that inconsistency is introduced here.
Existing implementations are inconsistent: libstdc++ constrains all three overloads, while libc++ and MSVC STL do not constrain any of them. IMO all three overloads should be constrained.History | |||
---|---|---|---|
Date | User | Action | Args |
2022-01-29 22:29:35 | admin | set | messages: + msg12295 |
2021-10-24 18:01:32 | admin | set | messages: + msg12199 |
2021-10-23 00:00:00 | admin | create |