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




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

Reply via email to