git: eaa3d34b6220 - main - cdefs.9: Update for C++ environments

From: Warner Losh <imp_at_FreeBSD.org>
Date: Sat, 20 Jul 2024 15:50:58 UTC
The branch main has been updated by imp:

URL: https://cgit.FreeBSD.org/src/commit/?id=eaa3d34b6220d8858eabc622165ec4db2cc75e96

commit eaa3d34b6220d8858eabc622165ec4db2cc75e96
Author:     Warner Losh <imp@FreeBSD.org>
AuthorDate: 2024-07-20 14:38:52 +0000
Commit:     Warner Losh <imp@FreeBSD.org>
CommitDate: 2024-07-20 15:50:38 +0000

    cdefs.9: Update for C++ environments
    
    We support all the C++ standards to some degree. However, pre C++11
    standard support has been disappearing upstream, so also add a note
    about -pedantic-errors might not work for earlier standards. Add note
    about __cplusplus values.
    
    Sponsored by:           Netflix
---
 share/man/man9/cdefs.9 | 43 +++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 41 insertions(+), 2 deletions(-)

diff --git a/share/man/man9/cdefs.9 b/share/man/man9/cdefs.9
index 71b3e7fd4f81..dd45e3f61a9f 100644
--- a/share/man/man9/cdefs.9
+++ b/share/man/man9/cdefs.9
@@ -3,7 +3,7 @@
 .\"
 .\" SPDX-License-Identifier: BSD-2-Clause
 .\"
-.Dd July 18, 2024
+.Dd July 20, 2024
 .Dt CDEFS 9
 .Os
 .Sh NAME
@@ -281,7 +281,7 @@ still uses these.
 supports a number C standard environments.
 Selection of the language dialect is a compiler-dependent command line option,
 though it is usually
-.Fl cstd=XX
+.Fl std=XX
 where XX is the standard to set for compiling, such as c89 or c23.
 .Fx
 provides a number of selection macros to control visibility of symbols.
@@ -402,6 +402,45 @@ extensions are visible, 0 otherwise.
 .St -isoC-2011
 Appendix K 3.7.4.1
 extensions are visible, 0 otherwise.
+.Sh Supported C++ Environments
+.Fx
+supports C++11 and newer standards fully.
+.Bl -tag
+.It ISO/IEC 14882:1998 ("C++98")
+.Dv __cplusplus = 199711
+.Pp
+The first standardized version of C++.
+Unlike K \*(Am R support in C, compilers dropped support for versions of
+the language prior to C++98.
+.It ISO/IEC 14882:2003 ("C++03")
+.Dv __cplusplus = 199711
+.Pp
+Note, this is the same value as C++98.
+C++03 did not define a new value for
+.Dv __cplusplus .
+There is no way, at compile time, to detect the difference.
+The standard resolved a number of defect reports and slightly
+expanded value initialization.
+Most compilers support it the same as C++98.
+.It ISO/IEC 14882:2011 ("C++11")
+.Dv __cplusplus = 201103
+.It ISO/IEC 14882:2014 ("C++14")
+.Dv __cplusplus = 201402
+.It ISO/IEC 14882:2017 ("C++17")
+.Dv __cplusplus = 201703
+.It ISO/IEC 14882:2020 ("C++20")
+.Dv __cplusplus = 202002
+.It ISO/IEC 14882:2023 ("C++23")
+.Dv __cplusplus = 202302
+.El
+.Pp
+.Fx
+uses llvm project's libc++.
+However, they are removing support for C++ prior to C++11.
+While programs can still build with earlier environments for now, these changes
+mean that
+.Fl pedantic-errors
+cannot be reliably enabled for standards older than C++11.
 .Sh HISTORY
 .In sys/cdefs.h
 first appeared in