[PATCH v2] libstdc++: fix __cpp_lib_chrono for old-ABI-only builds

Jonathan Wakely jwakely@redhat.com
Mon Oct 12 08:47:40 GMT 2026


On Mon, 12 Oct 2026 at 08:09, <hugo@beauzee.fr> wrote:

> From: Hugo Beauzée-Luyssen <hugo.beauzee@datadoghq.com>
>
> __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 <hugo.beauzee@datadoghq.com>
> ---
>  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
>  # include <sstream>
>  # include <string>
>  # include <vector>
> --
> 2.43.0
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://gcc.gnu.org/pipermail/libstdc++/attachments/20261012/2fc600aa/attachment.htm>


More information about the Libstdc++ mailing list