On Wed, Apr 16, 2025 at 3:47 PM Tomasz Kamiński <tkami...@redhat.com> wrote:

> Because the _M_format(__rg, __fc) were placed outside of if constexpr,
> these method and it's childs where instantiated, even if _M_format<const
> _Range>
> could be used. Now we put the calls in else branch of if constexpr.
>
> libstdc++-v3/ChangeLog:
>
>         * include/std/format (range_formatter::format): Do not instantiate
>         _M_format for mutable _Rg if const _Rg can be used.
> ---
> Testing on x86_64-linux, but there are no tests that will detect
> uncessary instantiations.
>
This is not a correctness issue, only some dead code elimination, so
does not need to be in v15.

>
>  libstdc++-v3/include/std/format | 15 +++++++++------
>  1 file changed, 9 insertions(+), 6 deletions(-)
>
> diff --git a/libstdc++-v3/include/std/format
> b/libstdc++-v3/include/std/format
> index 27253f50ea8..d44c4b24abe 100644
> --- a/libstdc++-v3/include/std/format
> +++ b/libstdc++-v3/include/std/format
> @@ -5636,12 +5636,15 @@ namespace __format
>         {
>           using _Range = remove_reference_t<_Rg>;
>           if constexpr (__format::__const_formattable_range<_Range,
> _CharT>)
> -         {
> -           using _CRef = ranges::range_reference_t<const _Range>;
> -           if constexpr (same_as<remove_cvref_t<_CRef>, _Tp>)
> -             return _M_format<const _Range>(__rg, __fc);
> -         }
> -         return _M_format(__rg, __fc);
> +           {
> +             using _CRef = ranges::range_reference_t<const _Range>;
> +             if constexpr (same_as<remove_cvref_t<_CRef>, _Tp>)
> +               return _M_format<const _Range>(__rg, __fc);
> +             else
> +               return _M_format(__rg, __fc);
> +           }
> +         else
> +           return _M_format(__rg, __fc);
>         }
>
>      private:
> --
> 2.49.0
>
>

Reply via email to