From 8c05647c56bf099ac483ea0e8de99f61c1baa11a Mon Sep 17 00:00:00 2001
From: Jonathan Wakely -fabi-version
.
It is versioned as follows: -
GCC 3.0: (Error, not versioned)
GCC 3.1: (Error, not versioned)
GCC 3.2: -fabi-version=1
GCC 3.3: -fabi-version=1
GCC 3.4, GCC 4.x: -fabi-version=2
(Incompatible with previous)
Incremental bumping of a library pre-defined macro. For releases - before 3.4.0, the macro is __GLIBCPP__. For later releases, it's - __GLIBCXX__. (The libstdc++ project generously changed from CPP to - CXX throughout its source to allow the "C" pre-processor the CPP - macro namespace.) These macros are defined as the date the library - was released, in compressed ISO date format, as an unsigned long. +
GCC 3.0: (Error, not versioned)
GCC 3.1: (Error, not versioned)
GCC 3.2: -fabi-version=1
GCC 3.3: -fabi-version=1
GCC 3.4, GCC 4.x: -fabi-version=2
(Incompatible with previous)
GCC 5 and higher: -fabi-version=0
(See GCC manual for meaning)
Incremental bumping of a library pre-defined macro. For releases + before 3.4.0, the macro is __GLIBCPP__. For later + releases, it's __GLIBCXX__. (The libstdc++ project + generously changed from CPP to CXX throughout its source to allow the + "C" pre-processor the CPP macro namespace.) These macros are defined + as the date the library was released, in compressed ISO date format, + as an integer constant.
- This macro is defined in the file "c++config" in the
- "libstdc++-v3/include/bits" directory. Up to GCC 4.1.0, it was
+ This macro is defined in the file
+ c++config
in the
+ libstdc++-v3/include/bits
+ directory. Up to GCC 4.1.0, it was
changed every night by an automated script. Since GCC 4.1.0 it is set
during configuration to the same value as
gcc/DATESTAMP
, so for an official release its value
is the same as the date of the release, which is given in the GCC Release
Timeline.
- This macro is not useful for determining whether a particular feature is
- supported by the version of libstdc++ you are using. The date of a release
- might be after a feature was added to the development trunk, but the
- release could be from an older branch. For example, in the 5.4.0 release
- the macro has the value 20160603 which is greater than the 20160427 value
- of the macro in the 6.1.0 release, but there are features supported in the
- 6.1.0 release that are not supported in 5.4.0 release.
+ This macro can be used in code to detect whether the C++ Standard Library
+ implementation in use is libstdc++, but is not useful for detecting the
+ libstdc++ version, nor whether particular features are supported.
+ The macro value might be a date after a feature was added to the
+ development trunk, but the release could be from an older branch without
+ the feature. For example, in the 5.4.0 release the macro has the value
+ 20160603
which is greater than the
+ 20160427
value of the macro in the 6.1.0 release,
+ but there are features supported in the 6.1.0 release that are not
+ supported in 5.4.0 release.
You also can't test for the the exact values listed below to try and
identify a release, because a snapshot taken from the gcc-5-branch on
2016-04-27 would have the same value for the macro as the 6.1.0 release
despite being a different version.
Many GNU/Linux distributions build their GCC packages from snapshots, so
- the macro can have dates that doesn't correspond to official releases.
+ the macro can have dates that don't correspond to official releases.
It is versioned as follows: -
GCC 3.0.0: 20010615
GCC 3.0.1: 20010819
GCC 3.0.2: 20011023
GCC 3.0.3: 20011220
GCC 3.0.4: 20020220
GCC 3.1.0: 20020514
GCC 3.1.1: 20020725
GCC 3.2.0: 20020814
GCC 3.2.1: 20021119
GCC 3.2.2: 20030205
GCC 3.2.3: 20030422
GCC 3.3.0: 20030513
GCC 3.3.1: 20030804
GCC 3.3.2: 20031016
GCC 3.3.3: 20040214
GCC 3.4.0: 20040419
GCC 3.4.1: 20040701
GCC 3.4.2: 20040906
GCC 3.4.3: 20041105
GCC 3.4.4: 20050519
GCC 3.4.5: 20051201
GCC 3.4.6: 20060306
GCC 4.0.0: 20050421
GCC 4.0.1: 20050707
GCC 4.0.2: 20050921
GCC 4.0.3: 20060309
+
GCC 3.0.0: 20010615
GCC 3.0.1: 20010819
GCC 3.0.2: 20011023
GCC 3.0.3: 20011220
GCC 3.0.4: 20020220
GCC 3.1.0: 20020514
GCC 3.1.1: 20020725
GCC 3.2.0: 20020814
GCC 3.2.1: 20021119
GCC 3.2.2: 20030205
GCC 3.2.3: 20030422
GCC 3.3.0: 20030513
GCC 3.3.1: 20030804
GCC 3.3.2: 20031016
GCC 3.3.3: 20040214
GCC 3.4.0: 20040419
GCC 3.4.1: 20040701
GCC 3.4.2: 20040906
GCC 3.4.3: 20041105
GCC 3.4.4: 20050519
GCC 3.4.5: 20051201
GCC 3.4.6: 20060306
GCC 4.0.0: 20050421
GCC 4.0.1: 20050707
GCC 4.0.2: 20050921
GCC 4.0.3: 20060309
GCC 4.1.0 and later: the GCC release date, as shown in the GCC Release Timeline
- Incremental bumping of a library pre-defined macro, - _GLIBCPP_VERSION. This macro is defined as the released version of - the library, as a string literal. This is only implemented in - GCC 3.1.0 releases and higher, and is deprecated in 3.4 (where it - is called _GLIBCXX_VERSION). + Since GCC 7, incremental bumping of a library pre-defined macro, + _GLIBCXX_RELEASE. This macro is defined to the GCC + major version that the libstdc++ headers belong to, as an integer constant. + When compiling with GCC it has the same value as GCC's pre-defined + macro __GNUC__. + This macro can be used when libstdc++ is used with a non-GNU + compiler where __GNUC__ is not defined, or has a + different value that doesn't correspond to the libstdc++ version.
- This macro is defined in the file "c++config" in the
- "libstdc++-v3/include/bits" directory and is generated
- automatically by autoconf as part of the configure-time generation
- of config.h.
+ This macro is defined in the file
+ c++config
in the
+ libstdc++-v3/include/bits
+ directory and is generated automatically by autoconf as part of the
+ configure-time generation of
+ config.h
and subsequently
+ <bits/c++config.h>
.
+
+ Historically, incremental bumping of a library pre-defined macro, + _GLIBCPP_VERSION. This macro was defined as the + released version of the library, as a string literal. This was only + implemented in GCC 3.1.0 releases and higher, and was deprecated in + 3.4.x (where it was called _GLIBCXX_VERSION), + and is not defined in 4.0.0 and higher. +
+ This macro is defined in the same file as + _GLIBCXX_RELEASE, described above.
It is versioned as follows: -
GCC 3.0.0: "3.0.0"
GCC 3.0.1: "3.0.0" (Error, should be "3.0.1")
GCC 3.0.2: "3.0.0" (Error, should be "3.0.2")
GCC 3.0.3: "3.0.0" (Error, should be "3.0.3")
GCC 3.0.4: "3.0.0" (Error, should be "3.0.4")
GCC 3.1.0: "3.1.0"
GCC 3.1.1: "3.1.1"
GCC 3.2.0: "3.2"
GCC 3.2.1: "3.2.1"
GCC 3.2.2: "3.2.2"
GCC 3.2.3: "3.2.3"
GCC 3.3.0: "3.3"
GCC 3.3.1: "3.3.1"
GCC 3.3.2: "3.3.2"
GCC 3.3.3: "3.3.3"
GCC 3.4: "version-unused"
GCC 4.x: "version-unused"
+
GCC 3.0.0: "3.0.0"
GCC 3.0.1: "3.0.0"
(Error, should be "3.0.1"
)
GCC 3.0.2: "3.0.0"
(Error, should be "3.0.2"
)
GCC 3.0.3: "3.0.0"
(Error, should be "3.0.3"
)
GCC 3.0.4: "3.0.0"
(Error, should be "3.0.4"
)
GCC 3.1.0: "3.1.0"
GCC 3.1.1: "3.1.1"
GCC 3.2.0: "3.2"
GCC 3.2.1: "3.2.1"
GCC 3.2.2: "3.2.2"
GCC 3.2.3: "3.2.3"
GCC 3.3.0: "3.3"
GCC 3.3.1: "3.3.1"
GCC 3.3.2: "3.3.2"
GCC 3.3.3: "3.3.3"
GCC 3.4: "version-unused"
GCC 4 and later: not defined
Matching each specific C++ compiler release to a specific set of C++ include files. This is only implemented in GCC 3.1.1 releases and higher.
All C++ includes are installed in
- include/c++
, then nest in a
+ include/c++
, then nested in a
directory hierarchy corresponding to the C++ compiler's released
version. This version corresponds to the variable "gcc_version" in
"libstdc++-v3/acinclude.m4," and more details can be found in that
diff --git a/libstdc++-v3/doc/xml/manual/abi.xml b/libstdc++-v3/doc/xml/manual/abi.xml
index c818bd86605..f2b2ec37962 100644
--- a/libstdc++-v3/doc/xml/manual/abi.xml
+++ b/libstdc++-v3/doc/xml/manual/abi.xml
@@ -378,22 +378,26 @@ compatible.
-fabi-version=1
-fabi-version=1
-fabi-version=2
-fabi-version=0