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

Jonathan Wakely jwakely@redhat.com
Thu Apr 2 11:16:54 GMT 2026


On Thu, 2 Apr 2026 at 11:51, Tomasz Kaminski <tkaminsk@redhat.com> wrote:
>
>
>
> On Thu, Apr 2, 2026 at 12:34 PM Jonathan Wakely <jwakely@redhat.com> wrote:
>>
>> 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.
>
> Looks good, but should be in separate paragraph from implementation-specific
> macros. I would put the sentence after end of second paragraph, i.e one starting
> from:

Hmm, I wanted to say "don't use the impl-specific ones" in the same
paragraph as talking about those ones.

> >> + *  The `<version>` header defines feature test macros that can be used to
> >> + *  programmatically test properties
>>
>>  *
>>  *  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