On Thu, Nov 20, 2025 at 6:03 PM Jonathan Wakely <[email protected]> wrote:

> I think this was the only part of the recently-approved LWG 4015 changes
> which affect our implementation, because we already store the value as a
> union member, and already have accessors for that value which are not
> prone to the ADL problems solved by changes like replacing *rhs with
> rhs.operator*().
>
> libstdc++-v3/ChangeLog:
>
>         * include/std/optional (_Storage::_M_value): Use remove_cv_t for
>         type of union member.
> ---
>
> Tested x86_64-linux.
>
>  libstdc++-v3/include/std/optional | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/libstdc++-v3/include/std/optional
> b/libstdc++-v3/include/std/optional
> index 39db8d3d4a0f..0f718a22cf18 100644
> --- a/libstdc++-v3/include/std/optional
> +++ b/libstdc++-v3/include/std/optional
> @@ -249,7 +249,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>  #endif
>
>           _Empty_byte _M_empty;
> -         _Up _M_value;
> +         remove_cv_t<_Up> _M_value;

This changes are already done inside _Storage class template, with template
parameter _Up, and we instantiate it with _Storage<_Stored_type> where
      using _Stored_type = remove_const_t<_Tp>;
So I do not think this is changing anything, and if so would just be
confusing.

        };
>
>  #if __cpp_concepts < 202002L
> @@ -288,7 +288,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>           _Storage& operator=(_Storage&&) = default;
>
>           _Empty_byte _M_empty;
> -         _Up _M_value;
> +         remove_cv_t<_Up> _M_value;
>         };
>  #endif
>
> --
> 2.51.1
>
>

Reply via email to