[v3 PATCH] Implement the latest proposed resolution of LWG 2756

Jonathan Wakely jwakely@redhat.com
Thu Aug 18 11:30:00 GMT 2016


On 09/08/16 02:22 +0300, Ville Voutilainen wrote:
>    Implement the latest proposed resolution of LWG 2756.
>    * include/std/optional (Optional_base(const _Tp&))
>    (Optional_base(_Tp&&), using _Base::_Base): Remove.
>    (optional(nullopt_t)): New.
>    (optional(_Up&&)): Invoke base directly with in_place
>    rather than creating a temporary, add default template
>    argument, change constraints.
>    (optional(const optional<_Up>&)): Invoke base directly
>    with in_place, remove unnecessary constraints.
>    (optional(optional<_Up>&& __t)): Likewise.
>    (optional(in_place_t, _Args&&...)): New.
>    (optional(in_place_t, initializer_list<_Up>, _Args&&...)): Likewise.
>    (operator=(_Up&&)): Add default template argument, change constraints.
>    (operator=(const optional<_Up>&)): Put is_same first in the
>    constraints.
>    (operator=(optional<_Up>&&)): Likewise.
>    * testsuite/20_util/optional/assignment/5.cc: Add a test to
>    verify assignment from something that can't be perfect-forwarded.
>    * testsuite/20_util/optional/cons/value.cc: Add tests to verify
>    that a nested optional is disengaged when constructed
>    from a disengaged element type,    and to verify that assignments
>    from an engaged element type engage the optional.

OK for trunk.




More information about the Libstdc++ mailing list