[PATCH 10/10] libstdc++: Add Doxygen documentation to <version>

Jonathan Wakely jwakely@redhat.com
Thu Apr 2 10:34:03 GMT 2026


On Thu, 2 Apr 2026 at 09:18, Tomasz Kaminski <tkaminsk@redhat.com> wrote:
>
>
>
> On Thu, Apr 2, 2026 at 12:02 AM Jonathan Wakely <jwakely@redhat.com> wrote:
>>
>> libstdc++-v3/ChangeLog:
>>
>>         * include/std/version: Add Doxygen documentation comment.
>> ---
>>
>> Tested x86_64-linux, docs built with Doxygen 1.13.2 and 1.17.0 (from git)
>>
>>  libstdc++-v3/include/std/version | 26 ++++++++++++++++++++++++++
>>  1 file changed, 26 insertions(+)
>>
>> diff --git a/libstdc++-v3/include/std/version b/libstdc++-v3/include/std/version
>> index c6ac031f6b54..7b2273a245d8 100644
>> --- a/libstdc++-v3/include/std/version
>> +++ b/libstdc++-v3/include/std/version
>> @@ -25,6 +25,32 @@
>>  /** @file version
>>   *  This is a Standard C++ Library file.  You should @c \#include this file
>>   *  in your programs, rather than any of the @a *.h implementation files.
>> + *
>> + *  The `<version>` header defines feature test macros that can be used to
>> + *  programmatically test properties of the C++ implementation you are using.
>> + *  For example, by including `<version>` and then checking whether the
>> + *  `__cpp_lib_expected` macro is defined, you can tell whether `std::expected`
>> + *  is supported. The macros that are defined by `<version>` and the values
>> + *  of those macros depend on the C++ Standard Library implementation and on
>> + *  compiler flags such as `-std=c++23`, `-ffreestanding`, and `-fno-rtti`.
>> + *
>> + *  The list of macros that should be defined by `<version>` header can be
>> + *  found in the C++ standard committee's SD-6 document:
>> + *  https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations
>> + *  That document also documents which standard proposals the different macro
>> + *  values correspond to, e.g. `__cpp_lib_expected == 202202L` implies that
>> + *  only the original feature set of `std::expected` is supported, and
>> + *  `__cpp_lib_expected == 202211L` implies that the additional monadic
>> + *  functions such as `std::expected::and_then` are also supported.
>> + *
>> + *  The `<version>` header should also define any implementation-specific
>> + *  macros, which can sometimes be used to tell which C++ implementation
>> + *  the code is being compiled with. For example, in libstdc++ `<version>`
>> + *  defines the `_GLIBCXX_RELEASE` macro. Testing for the
>
> The remainder of last sentence is incomplete.

Oops, yes. I meant to write something like this and hadn't decided how
to word it.

--- a/libstdc++-v3/include/std/version
+++ b/libstdc++-v3/include/std/version
@@ -46,7 +46,10 @@
 *  The `<version>` header should also define any implementation-specific
 *  macros, which can sometimes be used to tell which C++ implementation
 *  the code is being compiled with. For example, in libstdc++ `<version>`
- *  defines the `_GLIBCXX_RELEASE` macro. Testing for the
+ *  defines the `_GLIBCXX_RELEASE` macro. Testing for supported features
+ *  using the standard feature test macros is recommended instead of writing
+ *  custom checks for specific implementations and specific versions using
+ *  non-standard macros.
 *
 *  The `<version>` header was first defined in C++20, but libstdc++
 *  provides it unconditionally and many of the macros it defines are






>>
>> + *
>> + *  The `<version>` header was first defined in C++20, but libstdc++
>> + *  provides it unconditionally and many of the macros it defines are
>> + *  present (and meaningful) for C++17 and older standards.
>>   */
>>
>>  #ifndef _GLIBCXX_VERSION_INCLUDED
>> --
>> 2.53.0
>>



More information about the Libstdc++ mailing list