On Mon, 12 Oct 2026 at 09:49, Jonathan Wakely <[email protected]> wrote:

>
>
> On Mon, 12 Oct 2026 at 09:47, Jonathan Wakely <[email protected]> wrote:
>
>>
>>
>> On Mon, 12 Oct 2026 at 08:09, <[email protected]> wrote:
>>
>>> From: Hugo Beauzée-Luyssen <[email protected]>
>>>
>>> __cpp_lib_chrono only reaches the C++20 threshold when
>>> _GLIBCXX_USE_CXX11_ABI is set. But chrono::tzdb and the rest of the
>>> C++20 calendar/timezone API are also declared when
>>> _GLIBCXX_USE_DUAL_ABI is unset (old-ABI-only builds), the same
>>> condition already used throughout <chrono> and <bits/chrono_io.h>.
>>>
>>> Add a tier for that case in version.def, defining the macro to
>>> 201803 (distinct from the full 201907 new-ABI value) so it reflects
>>> what's actually declared.
>>
>>
>> What's missing though? The difference between 201803 and 201907 is the
>> https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1466r3.html
>> paper, and that's not dependent on the new ABI, is it?
>>
>>
>>
>>> <chrono>'s own include guard for the
>>> headers tzdb needs can then go back to the plain __cpp_lib_chrono
>>> check.
>>>
>>> libstdc++-v3/ChangeLog:
>>>
>>>         * include/bits/version.def (chrono): Add a 201803 tier for
>>>         old-ABI-only builds.
>>>         * include/bits/version.h: Regenerate.
>>>         * include/std/chrono: Simplify include guard now that
>>>         __cpp_lib_chrono accounts for old-ABI-only builds.
>>>
>>> Assisted-by: Claude (claude-sonnet-5)
>>> Signed-off-by: Hugo Beauzée-Luyssen <[email protected]>
>>> ---
>>>  libstdc++-v3/include/bits/version.def | 6 ++++++
>>>  libstdc++-v3/include/bits/version.h   | 5 +++++
>>>  libstdc++-v3/include/std/chrono       | 2 +-
>>>  3 files changed, 12 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/libstdc++-v3/include/bits/version.def
>>> b/libstdc++-v3/include/bits/version.def
>>> index 9c523581c65..6db0d22b788 100644
>>> --- a/libstdc++-v3/include/bits/version.def
>>> +++ b/libstdc++-v3/include/bits/version.def
>>> @@ -624,6 +624,12 @@ ftms = {
>>>      hosted = yes;
>>>      cxx11abi = yes; // std::chrono::tzdb requires cxx11 std::string
>>>    };
>>> +  values = {
>>> +    v = 201803;
>>> +    cxxmin = 20;
>>> +    hosted = yes;
>>> +    extra_cond = "!_GLIBCXX_USE_DUAL_ABI";
>>> +  };
>>>    values = {
>>>      v = 201611;
>>>      cxxmin = 17;
>>> diff --git a/libstdc++-v3/include/bits/version.h
>>> b/libstdc++-v3/include/bits/version.h
>>> index e0003054af6..07af61af056 100644
>>> --- a/libstdc++-v3/include/bits/version.h
>>> +++ b/libstdc++-v3/include/bits/version.h
>>> @@ -691,6 +691,11 @@
>>>  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_chrono)
>>>  #   define __cpp_lib_chrono 201907L
>>>  #  endif
>>> +# elif (__cplusplus >= 202002L) && _GLIBCXX_HOSTED &&
>>> (!_GLIBCXX_USE_DUAL_ABI)
>>> +#  define __glibcxx_chrono 201803L
>>> +#  if defined(__glibcxx_want_all) || defined(__glibcxx_want_chrono)
>>> +#   define __cpp_lib_chrono 201803L
>>> +#  endif
>>>  # elif (__cplusplus >= 201703L) && _GLIBCXX_HOSTED
>>>  #  define __glibcxx_chrono 201611L
>>>  #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_chrono)
>>> diff --git a/libstdc++-v3/include/std/chrono
>>> b/libstdc++-v3/include/std/chrono
>>> index 4116f1c815e..ce0902522d7 100644
>>> --- a/libstdc++-v3/include/std/chrono
>>> +++ b/libstdc++-v3/include/std/chrono
>>> @@ -57,7 +57,7 @@
>>>  # include <bits/stl_algo.h>     // upper_bound
>>>  # include <bits/range_access.h> // begin/end for arrays
>>>  #endif
>>> -#if __cpp_lib_chrono >= 201803L // C++20 && HOSTED && USE_CXX11_ABI
>>> +#if __cpp_lib_chrono >= 201803L
>>>
>>
> And removing this comment is wrong, it should be edited to reflect the new
> condition, but not simply removed:
>
> +#if __cpp_lib_chrono >= 201803L // C++20 && HOSTED
>

And your change here doesn't match your commit message, which claims you
simplified the condition. But all you did was remove the comment.

And then there are several other places that should be edited to account
for the macro changes, e.g.

#if _GLIBCXX_USE_CXX11_ABI || ! _GLIBCXX_USE_DUAL_ABI
  template<typename _CharT>
    struct __formatter_chrono_info

That check should inspect __cpp_lib_chrono now, shouldn't it?



>
>
>
>
>>  # include <sstream>
>>>  # include <string>
>>>  # include <vector>
>>> --
>>> 2.43.0
>>>
>>>
>>>

Reply via email to