On Fri, 31 Mar 2023 at 12:06, Jonathan Wakely wrote:
>
> On Thu, 30 Mar 2023 at 17:01, Daniel Krügler wrote:
> >
> > Am Do., 30. März 2023 um 18:00 Uhr schrieb Jonathan Wakely via
> > Libstdc++ <libstd...@gcc.gnu.org>:
> > >
> > [..]
> > >
> > > In fact, thinking about P2641 some more, I might revert this change.
> > > Instead of adding an extra bool member to support constexpr, I think
> > > I'll just remove the 'constexpr' keywords from basic_endpoint for now,
> > > and implement it in terms of just inspecting the sa_family_t member of
> > > the union members. And then later, once we have something like P2641,
> > > we can re-add the constexpr keywords and use is_within_lifetime during
> > > constant evaluation. That way we don't add a bool then need to take it
> > > away again, changing the ABI each time.
> >
> > I was just going to make the same suggestion.
>
> Actually, as pointed out in Barry's P2641R1 paper, we can just use
> GCC's __builtin_constant_p:
>
> +      constexpr bool
> +      _M_is_v6() const noexcept
> +      {
> +       // For constexpr eval we can just detect which union member is active.
> +       // i.e. emulate P2641R1's std::is_active_member(&_M_data._M_v6)).
> +       if (std::__is_constant_evaluated())
> +         return __builtin_constant_p(_M_data._M_v6.sin6_family);
> +       return _M_data._M_v6.sin6_family == AF_INET6;
> +      }

Done in commit 10e573e86c6a1ed11df529288ed8fba97f876032

Reply via email to