Chapter 3. Using

Table of Contents

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
Experimental Library Extensions
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
Non-memory leaks in Pool and MT allocators
Data Race Hunting
Using gdb
Tracking uncaught exceptions
Debug Mode
Compile Time Checking

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.

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++17 since GCC 11, and g++ -std=gnu++14 in GCC 6, 7, 8, 9, and 10, and g++ -std=gnu++98 for older releases.

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.
-fno-exceptions See exception-free dialect
-fno-rtti As above, but RTTI-free dialect.
-pthreadFor ISO C++11 <thread>, <future>, <mutex>, or <condition_variable>.
-latomicLinking to libatomic is required for some uses of ISO C++11 <atomic>.
-lstdc++fsLinking to libstdc++fs is required for use of the Filesystem library extensions in <experimental/filesystem>.
-lstdc++_libbacktraceUntil C++23 support is non-experimental, linking to libstdc++_libbacktrace.a is required for use of the C++23 type std::stacktrace and related types in <stacktrace>.
-fopenmpFor parallel mode.
-ltbbLinking to tbb (Thread Building Blocks) is required for use of the Parallel Standard Algorithms and execution policies in <execution>.