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 >> >> >>
