On Wed, 16 Apr 2025 at 15:17, Tomasz Kaminski <tkami...@redhat.com> wrote: > > > > 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.
OK for trunk. If that's pushed before gcc-15 branches, great. >> >> >> 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 >>