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

Patrick Palka <[email protected]>
Newsgroups gmane.comp.gcc.patches,gmane.comp.gcc.libstdc++.devel
Message-ID <24a12bbb-19a0-5329-418a-24cd8a07f2ea@idea>
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:

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