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