Re: [PATCH] libstdc++: Implement LWG 4440 feature-test macros added to <iosfwd>

Jonathan Wakely <[email protected]>
Newsgroups gmane.comp.gcc.patches,gmane.comp.gcc.libstdc++.devel
Message-ID <CACb0b4mAR+Xydbsw+HaA75Furrh+AG2rpt-=H2yqaEx_xAJFJA@mail.gmail.com>
On Fri, 31 Jul 2026 at 14:29, Patrick Palka <[email protected]> wrote:
>
> On Fri, 31 Jul 2026, Tomasz Kaminski wrote:
>
> >
> >
> > On Fri, Jul 31, 2026 at 3:14 PM Patrick Palka <[email protected]> wrote:
> >       Tested on x86_64-pc-linux-gnu, does this look OK for trunk and
> >       backports?
> >
> >       -- >8 --
> >
> >       Note __cpp_lib_char8_t doesn't use the <bits/version.h> mechanism, it's
> >       defined in c++config and thus provided by all headers by default.
> >
> >       libstdc++-v3/ChangeLog:
> >
> >               * include/std/iosfwd: Provide feature-test macros
> >               __cpp_lib_spanstream and __cpp_lib_syncbuf.
> >               * testsuite/27_io/headers/iosfwd/synopsis.cc: Verify values
> >               of these FTMs.
> >       ---
> >        libstdc++-v3/include/std/iosfwd                         | 4 ++++
> >        libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc | 8 ++++++++
> >        2 files changed, 12 insertions(+)
> >
> >       diff --git a/libstdc++-v3/include/std/iosfwd b/libstdc++-v3/include/std/iosfwd
> >       index 1d5e684b53bb..511b2f3a23f1 100644
> >       --- a/libstdc++-v3/include/std/iosfwd
> >       +++ b/libstdc++-v3/include/std/iosfwd
> >       @@ -39,6 +39,10 @@
> >
> >        #include <bits/requires_hosted.h> // iostreams
> >
> >       +#define __glibcxx_want_spanstream
> >       +#define __glibcxx_want_syncbuf
> >       +#include <bits/version.h>
> >       +
> >          /**
> >           *  @defgroup io I/O
> >           *
> >       diff --git a/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc b/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc
> >       index 8d9501f42ef4..f39a0b95a3d6 100644
> >       --- a/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc
> >       +++ b/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc
> >       @@ -3,6 +3,14 @@
> >
> >        #include <iosfwd>
> >
> >       +#if __cplusplus >= 202202L && __cpp_lib_spanstream != 202106L
> >       +# error "Feature-test macro __cpp_lib_spanstrean has wrong value in <iosfwd>"
> >       +#endif
> >
> > I would test that __cpp_lib_char8_t is defined when you include this header, even
> > if it is for all headers.
>
> Sure:

The patch seems to have been repeated several times in the email, but
it looks good (several times ;-)
OK for trunk.

> -- >8 --
>
> Subject: [PATCH] libstdc++: Implement LWG 4440 feature-test macros added to
>  <iosfwd>
>
> Note __cpp_lib_char8_t doesn't use the <bits/version.h> mechanism, it's
> defined in c++config and thus provided by all headers by default.
>
> libstdc++-v3/ChangeLog:
>
>         * include/std/iosfwd: Provide feature-test macros
>         __cpp_lib_spanstream and __cpp_lib_syncbuf.
>         * testsuite/27_io/headers/iosfwd/synopsis.cc: Verify values
>         of these FTMs.
> ---
>  libstdc++-v3/include/std/iosfwd                      |  4 ++++
>  .../testsuite/27_io/headers/iosfwd/synopsis.cc       | 12 ++++++++++++
>  2 files changed, 16 insertions(+)
>
> diff --git a/libstdc++-v3/include/std/iosfwd b/libstdc++-v3/include/std/iosfwd
> index 1d5e684b53bb..511b2f3a23f1 100644
> --- a/libstdc++-v3/include/std/iosfwd
> +++ b/libstdc++-v3/include/std/iosfwd
> @@ -39,6 +39,10 @@
>
>  #include <bits/requires_hosted.h> // iostreams
>
> +#define __glibcxx_want_spanstream
> +#define __glibcxx_want_syncbuf
> +#include <bits/version.h>
> +
>    /**
>     *  @defgroup io I/O
>     *
> diff --git a/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc b/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc
> index 8d9501f42ef4..81b158b81285 100644
> --- a/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc
> +++ b/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc
> @@ -3,6 +3,18 @@
>
>  #include <iosfwd>
>
> +#if __cplusplus >= 202002L && __cpp_lib_char8_t != 201907L
> +# error "Feature-test macro __cpp_lib_char8_t has wrong value in <iosfwd>"
> +#endif
> +
> +#if __cplusplus >= 202202L && __cpp_lib_spanstream != 202106L
> +# error "Feature-test macro __cpp_lib_spanstrean has wrong value in <iosfwd>"
> +#endif
> +
> +#if __cplusplus >= 202002L && __cpp_lib_syncbuf != 201803L
> +# error "Feature-test macro __cpp_lib_syncbuf has wrong value in <iosfwd>"
> +#endif
> +
>  namespace std
>  {
>    // [iosfwd.syn]
> --
> 2.55.0.481.ga97fcc37c2
>
> Subject: [PATCH] libstdc++: Implement LWG 4440 feature-test macros added to
>  <iosfwd>
>
> Tested on x86_64-pc-linux-gnu, does this look OK for trunk and
> backports?
>
> -- >8 --
>
> Note __cpp_lib_char8_t doesn't use the <bits/version.h> mechanism, it's
> defined in c++config and thus provided by all headers by default.
>
> libstdc++-v3/ChangeLog:
>
>         * include/std/iosfwd: Provide feature-test macros
>         __cpp_lib_spanstream and __cpp_lib_syncbuf.
>         * testsuite/27_io/headers/iosfwd/synopsis.cc: Verify values
>         of these FTMs.
> ---
>  libstdc++-v3/include/std/iosfwd                      |  4 ++++
>  .../testsuite/27_io/headers/iosfwd/synopsis.cc       | 12 ++++++++++++
>  2 files changed, 16 insertions(+)
>
> diff --git a/libstdc++-v3/include/std/iosfwd b/libstdc++-v3/include/std/iosfwd
> index 1d5e684b53bb..511b2f3a23f1 100644
> --- a/libstdc++-v3/include/std/iosfwd
> +++ b/libstdc++-v3/include/std/iosfwd
> @@ -39,6 +39,10 @@
>
>  #include <bits/requires_hosted.h> // iostreams
>
> +#define __glibcxx_want_spanstream
> +#define __glibcxx_want_syncbuf
> +#include <bits/version.h>
> +
>    /**
>     *  @defgroup io I/O
>     *
> diff --git a/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc b/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc
> index 8d9501f42ef4..81b158b81285 100644
> --- a/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc
> +++ b/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc
> @@ -3,6 +3,18 @@
>
>  #include <iosfwd>
>
> +#if __cplusplus >= 202002L && __cpp_lib_char8_t != 201907L
> +# error "Feature-test macro __cpp_lib_char8_t has wrong value in <iosfwd>"
> +#endif
> +
> +#if __cplusplus >= 202202L && __cpp_lib_spanstream != 202106L
> +# error "Feature-test macro __cpp_lib_spanstrean has wrong value in <iosfwd>"
> +#endif
> +
> +#if __cplusplus >= 202002L && __cpp_lib_syncbuf != 201803L
> +# error "Feature-test macro __cpp_lib_syncbuf has wrong value in <iosfwd>"
> +#endif
> +
>  namespace std
>  {
>    // [iosfwd.syn]
> --
> 2.55.0.481.ga97fcc37c2
>
> Subject: [PATCH] libstdc++: Implement LWG 4440 feature-test macros added to
>  <iosfwd>
>
> Tested on x86_64-pc-linux-gnu, does this look OK for trunk and
> backports?
>
> -- >8 --
>
> Note __cpp_lib_char8_t doesn't use the <bits/version.h> mechanism, it's
> defined in c++config and thus provided by all headers by default.
>
> libstdc++-v3/ChangeLog:
>
>         * include/std/iosfwd: Provide feature-test macros
>         __cpp_lib_spanstream and __cpp_lib_syncbuf.
>         * testsuite/27_io/headers/iosfwd/synopsis.cc: Verify values
>         of these FTMs.
> ---
>  libstdc++-v3/include/std/iosfwd                      |  4 ++++
>  .../testsuite/27_io/headers/iosfwd/synopsis.cc       | 12 ++++++++++++
>  2 files changed, 16 insertions(+)
>
> diff --git a/libstdc++-v3/include/std/iosfwd b/libstdc++-v3/include/std/iosfwd
> index 1d5e684b53bb..511b2f3a23f1 100644
> --- a/libstdc++-v3/include/std/iosfwd
> +++ b/libstdc++-v3/include/std/iosfwd
> @@ -39,6 +39,10 @@
>
>  #include <bits/requires_hosted.h> // iostreams
>
> +#define __glibcxx_want_spanstream
> +#define __glibcxx_want_syncbuf
> +#include <bits/version.h>
> +
>    /**
>     *  @defgroup io I/O
>     *
> diff --git a/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc b/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc
> index 8d9501f42ef4..81b158b81285 100644
> --- a/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc
> +++ b/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc
> @@ -3,6 +3,18 @@
>
>  #include <iosfwd>
>
> +#if __cplusplus >= 202002L && __cpp_lib_char8_t != 201907L
> +# error "Feature-test macro __cpp_lib_char8_t has wrong value in <iosfwd>"
> +#endif
> +
> +#if __cplusplus >= 202202L && __cpp_lib_spanstream != 202106L
> +# error "Feature-test macro __cpp_lib_spanstrean has wrong value in <iosfwd>"
> +#endif
> +
> +#if __cplusplus >= 202002L && __cpp_lib_syncbuf != 201803L
> +# error "Feature-test macro __cpp_lib_syncbuf has wrong value in <iosfwd>"
> +#endif
> +
>  namespace std
>  {
>    // [iosfwd.syn]
> --
> 2.55.0.481.ga97fcc37c2
>
> Subject: [PATCH] libstdc++: Implement LWG 4440 feature-test macros added to
>  <iosfwd>
>
> Tested on x86_64-pc-linux-gnu, does this look OK for trunk and
> backports?
>
> -- >8 --
>
> Note __cpp_lib_char8_t doesn't use the <bits/version.h> mechanism, it's
> defined in c++config and thus provided by all headers by default.
>
> libstdc++-v3/ChangeLog:
>
>         * include/std/iosfwd: Provide feature-test macros
>         __cpp_lib_spanstream and __cpp_lib_syncbuf.
>         * testsuite/27_io/headers/iosfwd/synopsis.cc: Verify values
>         of these FTMs.
> ---
>  libstdc++-v3/include/std/iosfwd                      |  4 ++++
>  .../testsuite/27_io/headers/iosfwd/synopsis.cc       | 12 ++++++++++++
>  2 files changed, 16 insertions(+)
>
> diff --git a/libstdc++-v3/include/std/iosfwd b/libstdc++-v3/include/std/iosfwd
> index 1d5e684b53bb..511b2f3a23f1 100644
> --- a/libstdc++-v3/include/std/iosfwd
> +++ b/libstdc++-v3/include/std/iosfwd
> @@ -39,6 +39,10 @@
>
>  #include <bits/requires_hosted.h> // iostreams
>
> +#define __glibcxx_want_spanstream
> +#define __glibcxx_want_syncbuf
> +#include <bits/version.h>
> +
>    /**
>     *  @defgroup io I/O
>     *
> diff --git a/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc b/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc
> index 8d9501f42ef4..81b158b81285 100644
> --- a/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc
> +++ b/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc
> @@ -3,6 +3,18 @@
>
>  #include <iosfwd>
>
> +#if __cplusplus >= 202002L && __cpp_lib_char8_t != 201907L
> +# error "Feature-test macro __cpp_lib_char8_t has wrong value in <iosfwd>"
> +#endif
> +
> +#if __cplusplus >= 202202L && __cpp_lib_spanstream != 202106L
> +# error "Feature-test macro __cpp_lib_spanstrean has wrong value in <iosfwd>"
> +#endif
> +
> +#if __cplusplus >= 202002L && __cpp_lib_syncbuf != 201803L
> +# error "Feature-test macro __cpp_lib_syncbuf has wrong value in <iosfwd>"
> +#endif
> +
>  namespace std
>  {
>    // [iosfwd.syn]
> --
> 2.55.0.481.ga97fcc37c2
>
> Subject: [PATCH] libstdc++: Implement LWG 4440 feature-test macros added to
>  <iosfwd>
>
> Tested on x86_64-pc-linux-gnu, does this look OK for trunk and
> backports?
>
> -- >8 --
>
> Note __cpp_lib_char8_t doesn't use the <bits/version.h> mechanism, it's
> defined in c++config and thus provided by all headers by default.
>
> libstdc++-v3/ChangeLog:
>
>         * include/std/iosfwd: Provide feature-test macros
>         __cpp_lib_spanstream and __cpp_lib_syncbuf.
>         * testsuite/27_io/headers/iosfwd/synopsis.cc: Verify values
>         of these FTMs.
> ---
>  libstdc++-v3/include/std/iosfwd                      |  4 ++++
>  .../testsuite/27_io/headers/iosfwd/synopsis.cc       | 12 ++++++++++++
>  2 files changed, 16 insertions(+)
>
> diff --git a/libstdc++-v3/include/std/iosfwd b/libstdc++-v3/include/std/iosfwd
> index 1d5e684b53bb..511b2f3a23f1 100644
> --- a/libstdc++-v3/include/std/iosfwd
> +++ b/libstdc++-v3/include/std/iosfwd
> @@ -39,6 +39,10 @@
>
>  #include <bits/requires_hosted.h> // iostreams
>
> +#define __glibcxx_want_spanstream
> +#define __glibcxx_want_syncbuf
> +#include <bits/version.h>
> +
>    /**
>     *  @defgroup io I/O
>     *
> diff --git a/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc b/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc
> index 8d9501f42ef4..81b158b81285 100644
> --- a/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc
> +++ b/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc
> @@ -3,6 +3,18 @@
>
>  #include <iosfwd>
>
> +#if __cplusplus >= 202002L && __cpp_lib_char8_t != 201907L
> +# error "Feature-test macro __cpp_lib_char8_t has wrong value in <iosfwd>"
> +#endif
> +
> +#if __cplusplus >= 202202L && __cpp_lib_spanstream != 202106L
> +# error "Feature-test macro __cpp_lib_spanstrean has wrong value in <iosfwd>"
> +#endif
> +
> +#if __cplusplus >= 202002L && __cpp_lib_syncbuf != 201803L
> +# error "Feature-test macro __cpp_lib_syncbuf has wrong value in <iosfwd>"
> +#endif
> +
>  namespace std
>  {
>    // [iosfwd.syn]
> --
> 2.55.0.481.ga97fcc37c2
>
> Subject: [PATCH] libstdc++: Implement LWG 4440 feature-test macros added to
>  <iosfwd>
>
> Tested on x86_64-pc-linux-gnu, does this look OK for trunk and
> backports?
>
> -- >8 --
>
> Note __cpp_lib_char8_t doesn't use the <bits/version.h> mechanism, it's
> defined in c++config and thus provided by all headers by default.
>
> libstdc++-v3/ChangeLog:
>
>         * include/std/iosfwd: Provide feature-test macros
>         __cpp_lib_spanstream and __cpp_lib_syncbuf.
>         * testsuite/27_io/headers/iosfwd/synopsis.cc: Verify values
>         of these FTMs.
> ---
>  libstdc++-v3/include/std/iosfwd                      |  4 ++++
>  .../testsuite/27_io/headers/iosfwd/synopsis.cc       | 12 ++++++++++++
>  2 files changed, 16 insertions(+)
>
> diff --git a/libstdc++-v3/include/std/iosfwd b/libstdc++-v3/include/std/iosfwd
> index 1d5e684b53bb..511b2f3a23f1 100644
> --- a/libstdc++-v3/include/std/iosfwd
> +++ b/libstdc++-v3/include/std/iosfwd
> @@ -39,6 +39,10 @@
>
>  #include <bits/requires_hosted.h> // iostreams
>
> +#define __glibcxx_want_spanstream
> +#define __glibcxx_want_syncbuf
> +#include <bits/version.h>
> +
>    /**
>     *  @defgroup io I/O
>     *
> diff --git a/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc b/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc
> index 8d9501f42ef4..81b158b81285 100644
> --- a/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc
> +++ b/libstdc++-v3/testsuite/27_io/headers/iosfwd/synopsis.cc
> @@ -3,6 +3,18 @@
>
>  #include <iosfwd>
>
> +#if __cplusplus >= 202002L && __cpp_lib_char8_t != 201907L
> +# error "Feature-test macro __cpp_lib_char8_t has wrong value in <iosfwd>"
> +#endif
> +
> +#if __cplusplus >= 202202L && __cpp_lib_spanstream != 202106L
> +# error "Feature-test macro __cpp_lib_spanstrean has wrong value in <iosfwd>"
> +#endif
> +
> +#if __cplusplus >= 202002L && __cpp_lib_syncbuf != 201803L
> +# error "Feature-test macro __cpp_lib_syncbuf has wrong value in <iosfwd>"
> +#endif
> +
>  namespace std
>  {
>    // [iosfwd.syn]
> --
> 2.55.0.481.ga97fcc37c2
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.