From 8a29fdfd2313cde40aad2dcabe3ddc4d2aca0f91 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Tue, 21 Apr 2015 11:38:43 +0100 Subject: [PATCH] configure.xml: Update descriptions of options affecting dual ABI and add cross-references. * doc/xml/manual/configure.xml: Update descriptions of options affecting dual ABI and add cross-references. * doc/xml/manual/strings.xml: Clarify that string isn't COW now. * doc/xml/manual/using.xml: Document ABI transition. * doc/html/*: Regenerate. From-SVN: r222262 --- libstdc++-v3/ChangeLog | 6 + libstdc++-v3/doc/html/index.html | 2 +- libstdc++-v3/doc/html/manual/abi.html | 2 +- libstdc++-v3/doc/html/manual/configure.html | 18 +-- libstdc++-v3/doc/html/manual/index.html | 2 +- libstdc++-v3/doc/html/manual/intro.html | 2 +- libstdc++-v3/doc/html/manual/strings.html | 2 +- libstdc++-v3/doc/html/manual/using.html | 11 +- .../doc/html/manual/using_dual_abi.html | 65 +++++++++++ .../doc/html/manual/using_exceptions.html | 16 +-- .../doc/html/manual/using_macros.html | 15 ++- .../doc/html/manual/using_namespaces.html | 13 ++- libstdc++-v3/doc/xml/manual/configure.xml | 18 +-- libstdc++-v3/doc/xml/manual/strings.xml | 2 +- libstdc++-v3/doc/xml/manual/using.xml | 109 ++++++++++++++++++ 15 files changed, 245 insertions(+), 38 deletions(-) create mode 100644 libstdc++-v3/doc/html/manual/using_dual_abi.html diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 98a6036e5cd..f285f8c2fcc 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,11 @@ 2015-04-21 Jonathan Wakely + * doc/xml/manual/configure.xml: Update descriptions of options + affecting dual ABI and add cross-references. + * doc/xml/manual/strings.xml: Clarify that string isn't COW now. + * doc/xml/manual/using.xml: Document ABI transition. + * doc/html/*: Regenerate. + * doc/xml/manual/abi.xml: Use uppercase for C++ Standard Library. * doc/xml/manual/using.xml: Document newer -std options. Use better examples of nested namespaces. diff --git a/libstdc++-v3/doc/html/index.html b/libstdc++-v3/doc/html/index.html index feaa28c0e42..bd2c58e3714 100644 --- a/libstdc++-v3/doc/html/index.html +++ b/libstdc++-v3/doc/html/index.html @@ -23,7 +23,7 @@


Table of Contents

The GNU C++ Library Manual
I. Introduction -
1. Status
Implementation Status
C++ 1998/2003
Implementation Status
Implementation Specific Behavior
C++ 2011
Implementation Specific Behavior
C++ 2014
C++ TR1
Implementation Specific Behavior
C++ TR 24733
License
The Code: GPL
The Documentation: GPL, FDL
Bugs
Implementation Bugs
Standard Bugs
2. Setup
Prerequisites
Configure
Make
3. Using
Command Options
Headers
Header Files
Mixing Headers
The C Headers and namespace std
Precompiled Headers
Macros
Namespaces
Available Namespaces
namespace std
Using Namespace Composition
Linking
Almost Nothing
Finding Dynamic or Shared Libraries
Concurrency
Prerequisites
Thread Safety
Atomics
IO
Structure
Defaults
Future
Alternatives
Containers
Exceptions
Exception Safety
Exception Neutrality
Doing without
Compatibility
With C
With POSIX thread cancellation
Debugging Support
Using g++
Debug Versions of Library Binary Files
Memory Leak Hunting
Data Race Hunting
Using gdb
Tracking uncaught exceptions
Debug Mode
Compile Time Checking
Profile-based Performance Analysis
II. +
1. Status
Implementation Status
C++ 1998/2003
Implementation Status
Implementation Specific Behavior
C++ 2011
Implementation Specific Behavior
C++ 2014
C++ TR1
Implementation Specific Behavior
C++ TR 24733
License
The Code: GPL
The Documentation: GPL, FDL
Bugs
Implementation Bugs
Standard Bugs
2. Setup
Prerequisites
Configure
Make
3. Using
Command Options
Headers
Header Files
Mixing Headers
The C Headers and namespace std
Precompiled Headers
Macros
Dual ABI
Troubleshooting
Namespaces
Available Namespaces
namespace std
Using Namespace Composition
Linking
Almost Nothing
Finding Dynamic or Shared Libraries
Concurrency
Prerequisites
Thread Safety
Atomics
IO
Structure
Defaults
Future
Alternatives
Containers
Exceptions
Exception Safety
Exception Neutrality
Doing without
Compatibility
With C
With POSIX thread cancellation
Debugging Support
Using g++
Debug Versions of Library Binary Files
Memory Leak Hunting
Data Race Hunting
Using gdb
Tracking uncaught exceptions
Debug Mode
Compile Time Checking
Profile-based Performance Analysis
II. Standard Contents
4. Support diff --git a/libstdc++-v3/doc/html/manual/abi.html b/libstdc++-v3/doc/html/manual/abi.html index 2d60a023a53..c1db430fdaf 100644 --- a/libstdc++-v3/doc/html/manual/abi.html +++ b/libstdc++-v3/doc/html/manual/abi.html @@ -38,7 +38,7 @@ documented here.

Putting all of these ideas together results in the C++ Standard -library ABI, which is the compilation of a given library API by a +Library ABI, which is the compilation of a given library API by a given compiler ABI. In a nutshell:

“ diff --git a/libstdc++-v3/doc/html/manual/configure.html b/libstdc++-v3/doc/html/manual/configure.html index 6453f08d2e7..96f40a62ed0 100644 --- a/libstdc++-v3/doc/html/manual/configure.html +++ b/libstdc++-v3/doc/html/manual/configure.html @@ -228,13 +228,17 @@ when standard error is not available. This option disables those messages. This option does not change the library ABI.

--disable-libstdcxx-dual-abi

- Disable support for the new, C++11-conforming std::string - implementation. This option changes the library ABI. -

--with-default-libstdcxx-abi

- By default, the new std::string implementation will be - declared and a macro must be defined to declare the old implementation - instead. That default can be reversed by configuring the library with - --with-default-libstdcxx-abi=c++98. + Disable support for the new, C++11-conforming implementations of + std::string, std::list etc. so that the + library only provides definitions of types using the old ABI + (see Dual ABI). + This option changes the library ABI. +

--with-default-libstdcxx-abi=OPTION

+ Set the default value for the _GLIBCXX_USE_CXX11_ABI + macro (see Macros). + The default is OPTION=c++11 which sets the macro to + 1, + use OPTION=c++98 to set it to 0. This option does not change the library ABI.

--enable-vtable-verify[default]

Use -fvtable-verify=std to compile the C++ runtime with instrumentation for vtable verification. All virtual diff --git a/libstdc++-v3/doc/html/manual/index.html b/libstdc++-v3/doc/html/manual/index.html index 26f6233ff05..b6f34fa29aa 100644 --- a/libstdc++-v3/doc/html/manual/index.html +++ b/libstdc++-v3/doc/html/manual/index.html @@ -4,7 +4,7 @@


Table of Contents

I. Introduction -
1. Status
Implementation Status
C++ 1998/2003
Implementation Status
Implementation Specific Behavior
C++ 2011
Implementation Specific Behavior
C++ 2014
C++ TR1
Implementation Specific Behavior
C++ TR 24733
License
The Code: GPL
The Documentation: GPL, FDL
Bugs
Implementation Bugs
Standard Bugs
2. Setup
Prerequisites
Configure
Make
3. Using
Command Options
Headers
Header Files
Mixing Headers
The C Headers and namespace std
Precompiled Headers
Macros
Namespaces
Available Namespaces
namespace std
Using Namespace Composition
Linking
Almost Nothing
Finding Dynamic or Shared Libraries
Concurrency
Prerequisites
Thread Safety
Atomics
IO
Structure
Defaults
Future
Alternatives
Containers
Exceptions
Exception Safety
Exception Neutrality
Doing without
Compatibility
With C
With POSIX thread cancellation
Debugging Support
Using g++
Debug Versions of Library Binary Files
Memory Leak Hunting
Data Race Hunting
Using gdb
Tracking uncaught exceptions
Debug Mode
Compile Time Checking
Profile-based Performance Analysis
II. +
1. Status
Implementation Status
C++ 1998/2003
Implementation Status
Implementation Specific Behavior
C++ 2011
Implementation Specific Behavior
C++ 2014
C++ TR1
Implementation Specific Behavior
C++ TR 24733
License
The Code: GPL
The Documentation: GPL, FDL
Bugs
Implementation Bugs
Standard Bugs
2. Setup
Prerequisites
Configure
Make
3. Using
Command Options
Headers
Header Files
Mixing Headers
The C Headers and namespace std
Precompiled Headers
Macros
Dual ABI
Troubleshooting
Namespaces
Available Namespaces
namespace std
Using Namespace Composition
Linking
Almost Nothing
Finding Dynamic or Shared Libraries
Concurrency
Prerequisites
Thread Safety
Atomics
IO
Structure
Defaults
Future
Alternatives
Containers
Exceptions
Exception Safety
Exception Neutrality
Doing without
Compatibility
With C
With POSIX thread cancellation
Debugging Support
Using g++
Debug Versions of Library Binary Files
Memory Leak Hunting
Data Race Hunting
Using gdb
Tracking uncaught exceptions
Debug Mode
Compile Time Checking
Profile-based Performance Analysis
II. Standard Contents
4. Support diff --git a/libstdc++-v3/doc/html/manual/intro.html b/libstdc++-v3/doc/html/manual/intro.html index 8daa78aee85..ae8ce8fac9d 100644 --- a/libstdc++-v3/doc/html/manual/intro.html +++ b/libstdc++-v3/doc/html/manual/intro.html @@ -5,4 +5,4 @@ Prev The GNU C++ Library Manual Next
\ No newline at end of file + \ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/strings.html b/libstdc++-v3/doc/html/manual/strings.html index 55e0ee9cf64..075ee1b188a 100644 --- a/libstdc++-v3/doc/html/manual/strings.html +++ b/libstdc++-v3/doc/html/manual/strings.html @@ -267,7 +267,7 @@ stringtok(Container &container, string const &in, a vector's memory usage (see this FAQ entry) but the regular copy constructor cannot be used - because libstdc++'s string is Copy-On-Write. + because libstdc++'s string is Copy-On-Write in GCC 3.

In C++11 mode you can call s.shrink_to_fit() to achieve the same effect as s.reserve(s.size()). diff --git a/libstdc++-v3/doc/html/manual/using.html b/libstdc++-v3/doc/html/manual/using.html index dff5192f5f2..cc5c65079b0 100644 --- a/libstdc++-v3/doc/html/manual/using.html +++ b/libstdc++-v3/doc/html/manual/using.html @@ -2,14 +2,19 @@ Chapter 3. Using

Chapter 3. Using

Command Options

+ Next


Chapter 3. Using

Command Options

The set of features available in the GNU C++ library is shaped by several GCC Command Options. Options that impact libstdc++ are enumerated and detailed in the table below.

- By default, g++ is equivalent to g++ -std=gnu++98. The standard library also defaults to this dialect. -

Table 3.1. C++ Command Options

Option FlagsDescription
-std=c++98Use the 1998 ISO C++ standard plus amendments.
-std=gnu++98As directly above, with GNU extensions.
-std=c++11Use the 2011 ISO C++ standard.
-std=gnu++11As directly above, with GNU extensions.
-fexceptionsSee exception-free dialect
-frttiAs above, but RTTI-free dialect.
-pthread or -pthreadsFor ISO C++11 + The standard library conforms to the dialect of C++ specified by the + -std option passed to the compiler. + By default, g++ is equivalent to + g++ -std=gnu++98. +

Table 3.1. C++ Command Options

Option FlagsDescription
-std=c++98 or -std=c++03 + Use the 1998 ISO C++ standard plus amendments.
-std=gnu++98 or -std=gnu++03 + As directly above, with GNU extensions.
-std=c++11Use the 2011 ISO C++ standard.
-std=gnu++11As directly above, with GNU extensions.
-std=c++14Use the 2014 ISO C++ standard.
-std=gnu++14As directly above, with GNU extensions.
-fexceptionsSee exception-free dialect
-frttiAs above, but RTTI-free dialect.
-pthread or -pthreadsFor ISO C++11 <thread>, <future>, <mutex>, diff --git a/libstdc++-v3/doc/html/manual/using_dual_abi.html b/libstdc++-v3/doc/html/manual/using_dual_abi.html new file mode 100644 index 00000000000..24f4f7a7778 --- /dev/null +++ b/libstdc++-v3/doc/html/manual/using_dual_abi.html @@ -0,0 +1,65 @@ + +Dual ABI

Dual ABI

In the GCC 5.1 release libstdc++ introduced a new library ABI that + includes new implementations of std::string and + std::list. These changes were necessary to conform + to the 2011 C++ standard which forbids Copy-On-Write strings and requires + lists to keep track of their size. +

In order to maintain backwards compatibility for existing code linked + to libstdc++ the library's soname has not changed and the old + implementations are still supported in parallel with the new ones. + This is achieved by defining the new implementations in an inline namespace + so they have different names for linkage purposes, e.g. the new version of + std::list<int> is actually defined as + std::__cxx11::list<int>. Because the symbols + for the new implementations have different names the definitions for both + versions can be present in the same library. +

The _GLIBCXX_USE_CXX11_ABI macro (see +Macros) controls whether + the declarations in the library headers use the old or new ABI. + So the decision of which ABI to use can be made separately for each + source file being compiled. + Using the default configuration options for GCC the default value + of the macro is 1 which causes the new ABI to be active, + so to use the old ABI you must explicitly define the macro to + 0 before including any library headers. + (Be aware that some GNU/Linux distributions configure GCC 5 differently so + that the default value of the macro is 0 and users must + define it to 1 to enable the new ABI.) +

Although the changes were made for C++11 conformance, the choice of ABI + to use is independent of the -std option used to compile + your code, i.e. for a given GCC build the default value of the + _GLIBCXX_USE_CXX11_ABI macro is the same for all dialects. + This ensures that the -std does not change the ABI, so + that it is straightforward to link C++03 and C++11 code together. +

Because std::string is used extensively + throughout the library a number of other types are also defined twice, + including the stringstream classes and several facets used by + std::locale. The standard facets which are always + installed in a locale may be present twice, with both ABIs, to ensure that + code like + std::use_facet<std::time_get<char>>(locale); + will work correctly for both std::time_get and + std::__cxx11::time_get (even if a user-defined + facet that derives from one or other version of + time_get is installed in the locale). +

Although the standard exception types defined in + <stdexcept> use strings, they + are not defined twice, so that a std::out_of_range + exception thrown in one file can always be caught by a suitable handler in + another file, even if the two files are compiled with different ABIs. +

Troubleshooting

If you get linker errors about undefined references to symbols + that involve types in the std::__cxx11 namespace or the tag + [abi:cxx11] then it probably indicates that you are trying to + link together object files that were compiled with different values for the + _GLIBCXX_USE_CXX11_ABI macro. This commonly happens when + linking to a third-party library that was compiled with an older version + of GCC. If the third-party library cannot be rebuilt with the new ABI then + you will need to recompile your code with the old ABI. +

Not all uses of the new ABI will cause changes in symbol names, for + example a class with a std::string member variable + will have the same mangled name whether compiled with the old or new ABI. + In order to detect such problems the new types and functions are + annotated with the abi_tag attribute, allowing the + compiler to warn about potential ABI incompatibilities in code using them. + Those warnings can be enabled with the -Wabi-tag option. +

\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/using_exceptions.html b/libstdc++-v3/doc/html/manual/using_exceptions.html index 00e9d38f315..cb7c9991304 100644 --- a/libstdc++-v3/doc/html/manual/using_exceptions.html +++ b/libstdc++-v3/doc/html/manual/using_exceptions.html @@ -265,7 +265,7 @@ is called. } catch(...) { this->_M_setstate(ios_base::badbit); } -

Bibliography

+

Bibliography

System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008) @@ -274,39 +274,39 @@ is called. . Copyright © 2008 The Open Group/The Institute of Electrical and Electronics Engineers, Inc. - .

+ .

Error and Exception Handling . David Abrahams . Boost - .

+ .

Exception-Safety in Generic Components . David Abrahams. Boost - .

+ .

Standard Library Exception Policy . Matt Austern. WG21 N1077 - .

+ .

ia64 c++ abi exception handling . Richard Henderson. GNU - .

+ .

+ . Bjarne Stroustrup.

Exceptional C++ . Exception-Safety Issues and Techniques - . Herb Sutter.

+ . Herb Sutter.

GCC Bug 25191: exception_defines.h #defines try/catch diff --git a/libstdc++-v3/doc/html/manual/using_macros.html b/libstdc++-v3/doc/html/manual/using_macros.html index bac3f363080..4bb99b1f5d2 100644 --- a/libstdc++-v3/doc/html/manual/using_macros.html +++ b/libstdc++-v3/doc/html/manual/using_macros.html @@ -1,5 +1,5 @@ -Macros

Macros

+Macros

Macros

All library macros begin with _GLIBCXX_.

Furthermore, all pre-processor macros, switches, and @@ -50,6 +50,17 @@ be useful in updating old C++ code which no longer meet the requirements of the language, or for checking current code against new language standards. +

_GLIBCXX_USE_CXX11_ABI

+ Defined to the value 1 by default. + Configurable via --disable-libstdcxx-dual-abi + and/or --with-default-libstdcxx-abi. + ABI-changing. + When defined to a non-zero value the library headers will use the + new C++11-conforming ABI introduced in GCC 5, rather than the older + ABI introduced in GCC 3.4. This changes the definition of several + class templates, including std:string, + std::list and some locale facets. + For more details see Dual ABI.

_GLIBCXX_CONCEPT_CHECKS

Undefined by default. Configurable via --enable-concept-checks. When defined, performs @@ -71,4 +82,4 @@

_GLIBCXX_PROFILE

Undefined by default. When defined, compiles user code using the profile mode. -

\ No newline at end of file +

\ No newline at end of file diff --git a/libstdc++-v3/doc/html/manual/using_namespaces.html b/libstdc++-v3/doc/html/manual/using_namespaces.html index 224c7d6bf57..0fe9ce33399 100644 --- a/libstdc++-v3/doc/html/manual/using_namespaces.html +++ b/libstdc++-v3/doc/html/manual/using_namespaces.html @@ -1,16 +1,19 @@ -Namespaces

Namespaces

Available Namespaces

There are three main namespaces. +Namespaces

Namespaces

Available Namespaces

There are three main namespaces.

  • std

    The ISO C++ standards specify that "all library entities are defined within namespace std." This includes namespaces nested -within namespace std, such as namespace -std::tr1. +within namespace std, such as namespace +std::chrono.

  • abi

    Specified by the C++ ABI. This ABI specifies a number of type and function APIs supplemental to those required by the ISO C++ Standard, but necessary for interoperability.

  • __gnu_

    Indicating one of several GNU extensions. Choices include __gnu_cxx, __gnu_debug, __gnu_parallel, and __gnu_pbds. -

A complete list of implementation namespaces (including namespace contents) is available in the generated source documentation. +

The library uses a number of inline namespaces as implementation +details that are not intended for users to refer to directly, these include +std::__detail, std::__cxx11 and std::_V2. +

A complete list of implementation namespaces (including namespace contents) is available in the generated source documentation.

namespace std

One standard requirement is that the library components are defined in namespace std::. Thus, in order to use these types or @@ -57,4 +60,4 @@ namespace gtk std::string; (depending on whether the system has libstdc++ in std:: or not). (ideas from Llewelly and Karl Nelson) -

\ No newline at end of file +

\ No newline at end of file diff --git a/libstdc++-v3/doc/xml/manual/configure.xml b/libstdc++-v3/doc/xml/manual/configure.xml index a6e0c212cff..56d071ec469 100644 --- a/libstdc++-v3/doc/xml/manual/configure.xml +++ b/libstdc++-v3/doc/xml/manual/configure.xml @@ -385,18 +385,22 @@ --disable-libstdcxx-dual-abi - Disable support for the new, C++11-conforming std::string - implementation. This option changes the library ABI. + Disable support for the new, C++11-conforming implementations of + std::string, std::list etc. so that the + library only provides definitions of types using the old ABI + (see ). + This option changes the library ABI. ---with-default-libstdcxx-abi +--with-default-libstdcxx-abi=OPTION - By default, the new std::string implementation will be - declared and a macro must be defined to declare the old implementation - instead. That default can be reversed by configuring the library with - --with-default-libstdcxx-abi=c++98. + Set the default value for the _GLIBCXX_USE_CXX11_ABI + macro (see ). + The default is which sets the macro to + 1, + use to set it to 0. This option does not change the library ABI. diff --git a/libstdc++-v3/doc/xml/manual/strings.xml b/libstdc++-v3/doc/xml/manual/strings.xml index 6a94fa22cb4..101f8cd3331 100644 --- a/libstdc++-v3/doc/xml/manual/strings.xml +++ b/libstdc++-v3/doc/xml/manual/strings.xml @@ -353,7 +353,7 @@ stringtok(Container &container, string const &in, a vector's memory usage (see this FAQ entry) but the regular copy constructor cannot be used - because libstdc++'s string is Copy-On-Write. + because libstdc++'s string is Copy-On-Write in GCC 3. In C++11 mode you can call s.shrink_to_fit() to achieve the same effect as diff --git a/libstdc++-v3/doc/xml/manual/using.xml b/libstdc++-v3/doc/xml/manual/using.xml index 0ce440703dd..8b4af1a5ed2 100644 --- a/libstdc++-v3/doc/xml/manual/using.xml +++ b/libstdc++-v3/doc/xml/manual/using.xml @@ -875,6 +875,22 @@ g++ -Winvalid-pch -I. -include stdc++.h -H -g -O2 hello.cc -o test.exe + _GLIBCXX_USE_CXX11_ABI + + + Defined to the value 1 by default. + Configurable via --disable-libstdcxx-dual-abi + and/or --with-default-libstdcxx-abi. + ABI-changing. + When defined to a non-zero value the library headers will use the + new C++11-conforming ABI introduced in GCC 5, rather than the older + ABI introduced in GCC 3.4. This changes the definition of several + class templates, including std:string, + std::list and some locale facets. + For more details see . + + + _GLIBCXX_CONCEPT_CHECKS @@ -922,6 +938,94 @@ g++ -Winvalid-pch -I. -include stdc++.h -H -g -O2 hello.cc -o test.exe +
+ Dual ABI + + + In the GCC 5.1 release libstdc++ introduced a new library ABI that + includes new implementations of std::string and + std::list. These changes were necessary to conform + to the 2011 C++ standard which forbids Copy-On-Write strings and requires + lists to keep track of their size. + + + In order to maintain backwards compatibility for existing code linked + to libstdc++ the library's soname has not changed and the old + implementations are still supported in parallel with the new ones. + This is achieved by defining the new implementations in an inline namespace + so they have different names for linkage purposes, e.g. the new version of + std::list<int> is actually defined as + std::__cxx11::list<int>. Because the symbols + for the new implementations have different names the definitions for both + versions can be present in the same library. + + + The _GLIBCXX_USE_CXX11_ABI macro (see +) controls whether + the declarations in the library headers use the old or new ABI. + So the decision of which ABI to use can be made separately for each + source file being compiled. + Using the default configuration options for GCC the default value + of the macro is 1 which causes the new ABI to be active, + so to use the old ABI you must explicitly define the macro to + 0 before including any library headers. + (Be aware that some GNU/Linux distributions configure GCC 5 differently so + that the default value of the macro is 0 and users must + define it to 1 to enable the new ABI.) + + + Although the changes were made for C++11 conformance, the choice of ABI + to use is independent of the option used to compile + your code, i.e. for a given GCC build the default value of the + _GLIBCXX_USE_CXX11_ABI macro is the same for all dialects. + This ensures that the does not change the ABI, so + that it is straightforward to link C++03 and C++11 code together. + + + Because std::string is used extensively + throughout the library a number of other types are also defined twice, + including the stringstream classes and several facets used by + std::locale. The standard facets which are always + installed in a locale may be present twice, with both ABIs, to ensure that + code like + std::use_facet<std::time_get<char>>(locale); + will work correctly for both std::time_get and + std::__cxx11::time_get (even if a user-defined + facet that derives from one or other version of + time_get is installed in the locale). + + + Although the standard exception types defined in + <stdexcept> use strings, they + are not defined twice, so that a std::out_of_range + exception thrown in one file can always be caught by a suitable handler in + another file, even if the two files are compiled with different ABIs. + + +
Troubleshooting + + If you get linker errors about undefined references to symbols + that involve types in the std::__cxx11 namespace or the tag + [abi:cxx11] then it probably indicates that you are trying to + link together object files that were compiled with different values for the + _GLIBCXX_USE_CXX11_ABI macro. This commonly happens when + linking to a third-party library that was compiled with an older version + of GCC. If the third-party library cannot be rebuilt with the new ABI then + you will need to recompile your code with the old ABI. + + + Not all uses of the new ABI will cause changes in symbol names, for + example a class with a std::string member variable + will have the same mangled name whether compiled with the old or new ABI. + In order to detect such problems the new types and functions are + annotated with the abi_tag attribute, allowing the + compiler to warn about potential ABI incompatibilities in code using them. + Those warnings can be enabled with the option. + + +
+
+
Namespaces @@ -956,6 +1060,11 @@ and __gnu_pbds. + The library uses a number of inline namespaces as implementation +details that are not intended for users to refer to directly, these include +std::__detail, std::__cxx11 and std::_V2. + + A complete list of implementation namespaces (including namespace contents) is available in the generated source documentation. -- 2.30.2