-std=
command-line option.
For information about the status of C++ defect reports, please see this page.
For information about the status of the library implementation, please see the Implementation Status section of the Libstdc++ manual.
GCC has experimental support for the next revision of the C++ standard, which is expected to be published in 2026.
Language Feature | Proposal | Available in GCC? | SD-6 Feature Test |
---|---|---|---|
Remove undefined behavior from lexing | P2621R2 (DR) | Yes | |
Making non-encodable string literals ill-formed | P1854R4 (DR) | 14 | |
Unevaluated strings | P2361R6 | 14 | |
Add @, $, and ` to the basic character set | P2558R2 | 15 | |
constexpr cast from void* |
P2738R1 | 14 | __cpp_constexpr >= 202306L |
On the ignorability of standard attributes | P2552R3 (DR) | No | |
Static storage for braced initializers | P2752R3 (DR) | 14 | |
User-generated static_assert messages |
P2741R3 | 14 | __cpp_static_assert >= 202306L |
Placeholder variables with no name | P2169R4 | 14 | __cpp_placeholder_variables >= 202306L |
Pack indexing | P2662R3 | No | __cpp_pack_indexing >= 202311L |
Removing deprecated arithmetic conversion on enumerations | P2864R2 (DR) | 14 | |
Template parameter initialization | P2308R1 (DR) | No | |
Disallow binding a returned reference to a temporary | P2748R5 | 14 | |
Attributes for structured bindings | P0609R3 | 15 | __cpp_structured_bindings >= 202403L |
Erroneous behavior for uninitialized reads | P2795R5 | No | |
= delete("reason"); |
P2573R2 | 15 | __cpp_deleted_function >= 202403L |
Variadic friends | P2893R3 | 15 | __cpp_variadic_friend >= 202403L |
Clarifying rules for brace elision in aggregate initialization | P3106R1 (DR) | Yes | |
Disallow module declarations to be macros | P3034R1 (DR) | No | |
Trivial infinite loops are not undefined behavior | P2809R3 (DR) | 14 | |
constexpr placement new |
P2747R2 | 15 | __cpp_constexpr >= 202406L |
Structured binding declaration as a condition | P0963R3 | 15 | |
Ordering of constraints involving fold expressions | P2963R3 | No | |
Deleting a pointer to an incomplete type should be ill-formed | P3144R2 | 15 |
GCC has experimental support for the next revision of the C++ standard, which is expected to be published in 2023.
C++23 features are available since GCC 11. To enable C++23
support, add the command-line parameter -std=c++2b
to your g++
command line. Or, to enable GNU
extensions in addition to C++23 features,
add -std=gnu++2b
.
Important: Because the ISO C++23 standard is still evolving, GCC's support is experimental. No attempt will be made to maintain backward compatibility with implementations of C++23 features that do not reflect the final standard.
Language Feature | Proposal | Available in GCC? | SD-6 Feature Test |
---|---|---|---|
Literal Suffix for (signed) size_t | P0330R8 | 11 | __cpp_size_t_suffix >= 202006L |
Make () more optional for lambdas | P1102R2 | 11 | |
DR: Declarations and where to find them | P1787R6 | No | |
if consteval |
P1938R3 | 12 | __cpp_if_consteval >= 202106L |
C++ Identifier Syntax using Unicode Standard Annex 31 | P1949R7 | 12 | |
Allow Duplicate Attributes | P2156R1 | 11 | |
Narrowing contextual conversions to bool | P1401R5 | 9 | |
Trimming whitespaces before line splicing | P2223R2 | Yes | |
Mixed string literal concatenation | P2201R1 | Yes | |
Make declaration order layout mandated | P1847R4 | Yes | |
Removing Garbage Collection Support | P2186R2 | 12 | |
Simpler implicit move | P2266R3 | 13 | __cpp_implicit_move >= 202207L |
Deducing this | P0847R7 | 14 | __cpp_explicit_this_parameter >= 202110L |
CWG2586 | |||
Change scope of lambda trailing-return-type | P2036R3 | No | |
P2579R0 | |||
Multidimensional subscript operator | P2128R6 | 12 | __cpp_multidimensional_subscript >= 202110L |
CWG2507 | 13 | ||
Non-literal variables (and labels and gotos) in constexpr functions | P2242R3 | 12 | __cpp_constexpr >= 202110L |
Character encoding of diagnostic text | P2246R1 | No | |
Character sets and encodings | P2314R4 | 10 | |
Consistent character literal encoding | P2316R2 | Yes | |
Add support for preprocessing directives elifdef and elifndef | P2334R1 | 12 | |
Extend init-statement to allow alias-declaration | P2360R0 | 12 | |
auto(x): decay-copy in the language | P0849R8 | 12 | |
Labels at the end of compound statements | P2324R1 | 13 | |
CWG 2397: auto specifier for pointers and references to arrays | CWG2397 | 12 | |
CWG 2481: Cv-qualification of temporary to which a reference is bound | CWG2481 | Yes | |
Attributes on lambda-expressions | P2173R1 | 9 | |
A type trait to detect reference binding to temporary | P2255R2 | 13 | |
The Equality Operator You Are Looking For | P2468R2 | 13 | |
De-deprecating volatile compound operations | P2327R1 | 13 | |
Support for #warning |
P2437R1 | Yes (extension) 13 (P2437R1) |
|
Remove non-encodable wide character literals and multicharacter wide character literals | P2362R3 | 13 | |
Delimited escape sequences | P2290R3 | 13 | |
Named universal character escapes | P2071R2 | 13 | __cpp_named_character_escapes >= 202207L |
Relaxing some constexpr restrictions | P2448R2 | 13 | __cpp_constexpr >= 202207L |
Using unknown references in constant expressions | P2280R4 | 14 | |
static operator() |
P1169R4 | 13 | __cpp_static_call_operator >= 202207L |
Extended floating-point types and standard names | P1467R9 | 13 | __STDCPP_FLOAT16_T__ __STDCPP_FLOAT32_T__ __STDCPP_FLOAT64_T__ __STDCPP_FLOAT128_T__ __STDCPP_BFLOAT16_T__ |
Class template argument deduction from inherited constructors | P2582R1 | 14 | |
Portable assumptions | P1774R8 | 13 | |
Support for UTF-8 as a portable source file encoding | P2295R6 | 13 | |
char8_t Compatibility and Portability Fix |
P2513R3 | 13 | __cpp_char8_t >= 202207L |
Relax requirements on wchar_t to match existing practices |
P2460R2 | Yes | |
Explicit lifetime management | P2590R2 | No | |
static operator[] |
P2589R1 | 13 | __cpp_multidimensional_subscript >= 202211L |
Permitting static constexpr variables in
constexpr functions |
P2647R1 | 13 | __cpp_constexpr >= 202211L |
DR: consteval needs to propagate up |
P2564R3 | 14 | __cpp_consteval >= 202211L |
DR: Meaningful exports | P2615R1 | 15 | |
Wording for P2644R1 Fix for Range-based for Loop | P2718R0 | No | __cpp_range_based_for >= 202211L |
GCC has experimental support for the latest revision of the C++ standard, which was published in 2020. The status of C++20 library features is described in the library documentation.
C++20 features are available since GCC 8. To enable C++20
support, add the command-line parameter -std=c++20
(use -std=c++2a
in GCC 9 and earlier)
to your g++
command line. Or, to enable GNU
extensions in addition to C++20 features,
add -std=gnu++20
.
Important: Because the ISO C++20 standard is very recent, GCC's support is experimental.
The following table lists new language features that have been accepted into the C++20 working draft. The "Proposal" column provides a link to the ISO C++ committee proposal that describes the feature, while the "Available in GCC?" column indicates the first version of GCC that contains an implementation of this feature (if it has been implemented).
Language Feature | Proposal | Available in GCC? | SD-6 Feature Test |
---|---|---|---|
Default member initializers for bit-fields | P0683R1 | 8 | |
Fixing const-qualified pointers to members | P0704R1 | 8 | |
Allow lambda capture [=, this] |
P0409R2 | 8 | |
__VA_OPT__ for preprocessor comma elision |
P0306R4 P1042R1 |
8
(partial, no #__VA_OPT__ support) 10 (partial, no placemarker token handling changes) 12 |
|
Designated initializers | P0329R4 | 8 | __cpp_designated_initializers >= 201707 |
Familiar template syntax for generic lambdas | P0428R2 | 8 | __cpp_generic_lambdas >= 201707 |
List deduction of vector | P0702R1 | 8 | |
Concepts | P0734R0 | 10 | __cpp_concepts >= 201907 |
P0857R0 | |||
P1084R2 | |||
P1141R2 | |||
P0848R3 | __cpp_concepts >= 202002 | ||
P1616R1 | __cpp_concepts >= 201907 | ||
P1452R2 | |||
P1972R0 | |||
P1980R0 | |||
P2092R0 | |||
P2103R0 | |||
P2113R0 | 10.2 (no reversed operator handling) | ||
Range-based for statements with initializer | P0614R1 | 9 | |
Simplifying implicit lambda capture | P0588R1 | 8 | |
ADL and function templates that are not visible | P0846R0 | 9 | |
const mismatch with defaulted copy constructor |
P0641R2 | 9 | |
Less eager instantiation of constexpr functions |
P0859R0 | 5.2 (mostly) 9 (P0859R0) |
__cpp_constexpr_in_decltype >= 201711 |
Consistent comparison (operator<=> ) |
P0515R3 | 10 | __cpp_impl_three_way_comparison >= 201711 |
P0905R1 | |||
P1120R0 | |||
P1185R2 | |||
P1186R3 | 11 | ||
P1630R1 | 10 | ||
P1946R0 | |||
P1959R0 | |||
P2002R1 | 10.2 | ||
P2085R0 | |||
Access checking on specializations | P0692R1 | Yes | |
Default constructible and assignable stateless lambdas | P0624R2 | 9 | |
Lambdas in unevaluated contexts | P0315R4 | 9 | |
Language support for empty objects | P0840R2 | 9 | |
Relaxing the range-for loop customization point finding rules | P0962R1 | 8 | |
Allow structured bindings to accessible members | P0969R0 | 8 | |
Relaxing the structured bindings customization point finding rules | P0961R1 | 8 | |
Down with typename! | P0634R3 | 9 | |
Allow pack expansion in lambda init-capture | P0780R2 | 9 | __cpp_init_captures >= 201803 |
P2095R0 | 10 | ||
Proposed wording for likely and unlikely attributes | P0479R5 | 9 | |
Deprecate implicit capture of this via [=] | P0806R2 | 9 | |
Class Types in Non-Type Template Parameters | P0732R2 | 9 | __cpp_nontype_template_parameter_class >= 201806 |
Inconsistencies with non-type template parameters | P1907R1 |
10
(no floating point, union, or subobject template args) 11 (complete) |
__cpp_nontype_template_args >= 201911 |
Atomic Compare-and-Exchange with Padding Bits | P0528R3 |
11 (compiler side only) 13 (full) |
|
Efficient sized delete for variable sized classes | P0722R3 | 9 | __cpp_impl_destroying_delete >= 201806 |
Allowing Virtual Function Calls in Constant Expressions | P1064R0 | 9 | |
Prohibit aggregates with user-declared constructors | P1008R1 | 9 | |
explicit(bool) | P0892R2 | 9 | __cpp_conditional_explicit >= 201806 |
Signed integers are two's complement | P1236R1 | 9 | |
char8_t | P0482R6 | 9 | __cpp_char8_t >= 201811 |
Immediate functions (consteval) | P1073R3 | 10
(no consteval virtual )
11 (full) |
__cpp_consteval >= 201811 |
P1937R2 | 10 | ||
std::is_constant_evaluated | P0595R2 | 9 | |
Nested inline namespaces | P1094R2 | 9 | |
Relaxations of constexpr restrictions | P1002R1 | 9 | |
P1327R1 | 10 | ||
P1330R0 | 9 | __cpp_constexpr >= 202002 | |
P1331R2 | 10 | __cpp_constexpr >= 201907 | |
P1668R1 | 10 | ||
P0784R7 | 10 | __cpp_constexpr_dynamic_alloc >= 201907 | |
Feature test macros | P0941R2 | 4.9 (__cpp_ macros) 5 ( __has_cpp_attribute ) |
|
Modules | P1103R3 | 11 (requires -fmodules-ts )(No Private Module Fragment, Parser-level Global Module Entity Merging, Global Module Implications of extern "C/C++" ,or Partition-specific Definition Visibility) |
__cpp_modules >= 201810L (Date of p1103r3) |
P1766R1 | No | ||
P1811R0 | 11 | ||
P1703R1 (superceded by p1857) | 11 | ||
P1874R1 | 11 | ||
P1979R0 | 11 | ||
P1779R3 | 11 | ||
P1857R3 | 11 | ||
P2115R0 | 11 | ||
P1815R2 | No | ||
Coroutines | P0912R5 as applied to n4861 | 10 (requires -fcoroutines) | __cpp_impl_coroutine >= 201902 |
Parenthesized initialization of aggregates | P0960R3 | 10 | __cpp_aggregate_paren_init >= 201902 |
P1975R0 | 11 | ||
DR: array size deduction in new-expression | P1009R2 | 11 | |
DR: Converting from T* to bool should be considered narrowing |
P1957R2 | 10 (C++20 mode only), 11 (all modes) | |
Stronger Unicode requirements | P1041R4 P1139R2 |
10 | |
Structured binding extensions | P1091R3 P1381R1 |
10 8 |
|
Deprecate a[b,c] |
P1161R3 | 10 | |
Deprecating some uses of volatile |
P1152R4 | 10 | |
[[nodiscard("with reason")]] |
P1301R4 | 10 | |
using enum |
P1099R5 | 11 | |
Class template argument deduction for aggregates | P1816R0 | 10 | __cpp_deduction_guides >= 201907L |
P2082R1 | 11 | ||
Class template argument deduction for alias templates | P1814R0 | 10 | |
Permit conversions to arrays of unknown bound | P0388R4 | 10 | |
constinit |
P1143R2 | 10 | __cpp_constinit >= 201907 |
Layout-compatibility and Pointer-interconvertibility Traits | P0466R5 | 12 | (in library) |
DR: Checking for abstract class types | P0929R2 | 11 | |
DR: More implicit moves (merge P0527R1 and P1155R3) | P1825R0 | 11 (C++20 mode) | |
DR: Pseudo-destructors end object lifetimes | P0593R6 | 11 |
GCC has almost full support for the previous revision of the C++ standard, which was published in 2017. The status of C++17 library features is described in the library documentation.
C++17 mode is the default since GCC 11; it can be explicitly selected
with the -std=c++17
command-line flag, or
-std=gnu++17
to enable GNU extensions as well.
Some C++17 features are available since GCC 5, but support was experimental
and the ABI of C++17 features was not stable until GCC 9.
The following table lists new language features that have been accepted into the C++17 working draft. The "Proposal" column provides a link to the ISO C++ committee proposal that describes the feature, while the "Available in GCC?" column indicates the first version of GCC that contains an implementation of this feature (if it has been implemented).
Language Feature | Proposal | Available in GCC? | SD-6 Feature Test |
---|---|---|---|
Removing trigraphs | N4086 | 5 | |
u8 character literals |
N4267 | 6 | __cpp_unicode_characters >= 201411 |
Folding expressions | N4295 | 6 | __cpp_fold_expressions >= 201411 |
Attributes for namespaces and enumerators | N4266 | 4.9 (namespaces) 6 (enumerators) |
__cpp_namespace_attributes >= 201411 __cpp_enumerator_attributes >= 201411 |
Nested namespace definitions | N4230 | 6 | __cpp_nested_namespace_definitions >= 201411 |
Allow constant evaluation for all non-type template arguments | N4268 | 6 | __cpp_nontype_template_args >= 201411 |
Extending static_assert |
N3928 | 6 | __cpp_static_assert >= 201411 |
New Rules for auto deduction from braced-init-list | N3922 | 5 | |
Allow typename in a template template parameter | N4051 | 5 | |
[[fallthrough]] attribute |
P0188R1 | 7 | __has_cpp_attribute(fallthrough) |
[[nodiscard]] attribute |
P0189R1 |
4.8 ([[gnu::warn_unused_result]] )7 (P0189R1) |
__has_cpp_attribute(nodiscard) |
[[maybe_unused]] attribute |
P0212R1 |
4.8 ([[gnu::unused]] )7 (P0212R1) |
__has_cpp_attribute(maybe_unused) |
Extension to aggregate initialization | P0017R1 | 7 | __cpp_aggregate_bases >= 201603 |
Wording for constexpr lambda |
P0170R1 | 7 | __cpp_constexpr >= 201603 |
Unary Folds and Empty Parameter Packs | P0036R0 | 6 | __cpp_fold_expressions >= 201603 |
Generalizing the Range-Based For Loop | P0184R0 | 6 | __cpp_range_based_for >= 201603 |
Lambda capture of *this by Value |
P0018R3 | 7 | __cpp_capture_star_this >= 201603 |
Construction Rules for enum class variables |
P0138R2 | 7 | |
Hexadecimal floating literals for C++ | P0245R1 | 3.0 | __cpp_hex_float >= 201603 |
Dynamic memory allocation for over-aligned data | P0035R4 | 7 | __cpp_aligned_new >= 201606 |
Guaranteed copy elision | P0135R1 | 7 | __cpp_guaranteed_copy_elision >= 201606 |
Refining Expression Evaluation Order for Idiomatic C++ | P0145R3 | 7 | |
constexpr if |
P0292R2 | 7 | __cpp_if_constexpr >= 201606 |
Selection statements with initializer | P0305R1 | 7 | |
Template argument deduction for class templates | P0091R3 P0512R0 |
7 8 |
__cpp_deduction_guides >= 201606 __cpp_deduction_guides >= 201611 |
Declaring non-type template parameters with auto | P0127R2 | 7 | __cpp_template_auto >= 201606 __cpp_nontype_template_parameter_auto >= 201606 |
Using attribute namespaces without repetition | P0028R4 | 7 | |
Ignoring unsupported non-standard attributes | P0283R2 | Yes | |
Structured bindings | P0217R3 | 7 | __cpp_structured_bindings >= 201606 |
Remove Deprecated Use of the register Keyword |
P0001R1 | 7 | |
Remove Deprecated operator++(bool) |
P0002R1 | 7 | |
Make exception specifications be part of the type system | P0012R1 | 7 | __cpp_noexcept_function_type >= 201510 |
__has_include for C++17 |
P0061R1 | 5 | |
Rewording inheriting constructors (core issue 1941 et al) | P0136R1 | 7 | __cpp_inheriting_constructors >= 201511 |
Inline variables | P0386R2 | 7 | __cpp_inline_variables >= 201606 |
DR 150, Matching of template template arguments | P0522R0 | 7 | __cpp_template_template_args >= 201611 |
Removing dynamic exception specifications | P0003R5 | 7 | |
Pack expansions in using-declarations | P0195R2 | 7 | __cpp_variadic_using >= 201611 |
A byte type definition |
P0298R0 | 7 |
GCC also implements experimental support for some language Technical Specifications published by the C++ committee.
Important: Because these Technical Specifications are still evolving toward future inclusion in a C++ standard, GCC's support is experimental. No attempt will be made to maintain backward compatibility with implementations of features that do not reflect the final standard.
Technical Specification | Document | Available in GCC? | Compiler Option | SD-6 Feature Test |
---|---|---|---|---|
Concepts | N4377 | 6 | -fconcepts | __cpp_concepts >= 201507 |
Transactional Memory | N4514 | 6 (no atomic_cancel) | -fgnu-tm | __cpp_transactional_memory >= 201505 |
Coroutines | N4649 | 10 | -fcoroutines | __cpp_impl_coroutine >= 201902L |
Modules | N4720 | 11 | -fmodules-ts | __cpp_modules >= 201810L |
GCC has full support for the 2014 C++ standard.
This mode is the default in GCC 6.1 up until GCC 10 (inclusive); it can
be explicitly selected with the -std=c++14
command-line flag,
or -std=gnu++14
to enable GNU extensions as well.
The following table lists new language features that are part of the C++14 standard. The "Proposal" column provides a link to the ISO C++ committee proposal that describes the feature, while the "Available in GCC?" column indicates the first version of GCC that contains an implementation of this feature.
Language Feature | Proposal | Available in GCC? | SD-6 Feature Test |
---|---|---|---|
Tweak to certain C++ contextual conversions | N3323 | 4.9 | |
Binary literals | N3472 |
4.3 (GNU)
4.9 (N3472) |
__cpp_binary_literals >= 201304 |
Return type deduction for normal functions | N3638 |
4.8 (N3386)
4.9 (N3638) |
__cpp_decltype_auto >= 201304 |
Generalized lambda capture (init-capture) | N3648 |
4.5 (partial)
4.9 (N3648) |
__cpp_init_captures >= 201304 |
Generic (polymorphic) lambda expressions | N3649 | 4.9 | __cpp_generic_lambdas >= 201304 |
Variable templates | N3651 | 5 | __cpp_variable_templates >= 201304 |
Relaxing requirements on constexpr functions | N3652 | 5 | __cpp_constexpr >= 201304 |
Member initializers and aggregates | N3653 | 5 | __cpp_aggregate_nsdmi >= 201304 |
Clarifying memory allocation | N3664 | N/A | |
Sized deallocation | N3778 | 5 | __cpp_sized_deallocation >= 201309 |
[[deprecated]] attribute | N3760 | 4.9 (N3797) | __has_cpp_attribute(deprecated) >= 201309 |
Single-quotation-mark as a digit separator | N3781 | 4.9 (N3797) | __cpp_digit_separator >= 201309 |
This feature was briefly part of the C++14 working paper, but was not part of the published standard; as a result, it has been removed from the compiler.
Language Feature | Proposal | Available in GCC? | SD-6 Feature Test |
---|---|---|---|
Runtime-sized arrays with automatic storage duration
(Removed from the standard) |
N3639 | ?.? (GNU VLAs)
4.9 (N3639) 5 (GNU VLAs) |
__cpp_runtime_arrays >= 198712 |
GCC 4.8.1 was the first feature-complete implementation of the 2011 C++ standard, previously known as C++0x.
This mode can be selected with
the -std=c++11
command-line flag, or -std=gnu++11
to enable GNU extensions as well.
For information about C++11 support in a specific version of GCC, please see:
Language Feature | Proposal | Available in GCC? | SD-6 Feature Test |
---|---|---|---|
Rvalue references | N2118 | GCC 4.3 | __cpp_rvalue_references >= 200610 |
Rvalue references for *this |
N2439 | GCC 4.8.1 | __cpp_ref_qualifiers >= 200710 |
Initialization of class objects by rvalues | N1610 | Yes | |
Non-static data member initializers | N2756 | GCC 4.7 | __cpp_nsdmi >= 200809 |
Variadic templates | N2242 | GCC 4.3 | __cpp_variadic_templates >= 200704 |
Extending variadic template template parameters | N2555 | GCC 4.4 | |
Initializer lists | N2672 | GCC 4.4 | __cpp_initializer_lists >= 200806 |
Static assertions | N1720 | GCC 4.3 | __cpp_static_assert >= 200410 |
auto -typed variables |
N1984 | GCC 4.4 | |
Multi-declarator auto |
N1737 | GCC 4.4 | |
Removal of auto as a storage-class specifier | N2546 | GCC 4.4 | |
New function declarator syntax | N2541 | GCC 4.4 | |
New wording for C++0x lambdas | N2927 | GCC 4.5 | __cpp_lambdas >= 200907 |
Declared type of an expression | N2343 | GCC 4.3 | __cpp_decltype >= 200707 |
decltype and call expressions | N3276 | GCC 4.8.1 | |
Right angle brackets | N1757 | GCC 4.3 | |
Default template arguments for function templates | DR226 | GCC 4.3 | |
Solving the SFINAE problem for expressions | DR339 | GCC 4.4 | |
Template aliases | N2258 | GCC 4.7 | __cpp_alias_templates >= 200704 |
Extern templates | N1987 | Yes | |
Null pointer constant | N2431 | GCC 4.6 | |
Strongly-typed enums | N2347 | GCC 4.4 | |
Forward declarations for enums | N2764 | GCC 4.6 | |
Generalized attributes | N2761 | GCC 4.8 | __cpp_attributes >= 200809; __has_cpp_attribute(noreturn) >= 200809; __has_cpp_attribute(carries_dependency) == 0 (not implemented) |
Generalized constant expressions | N2235 | GCC 4.6 | __cpp_constexpr >= 200704 |
Alignment support | N2341 | GCC 4.8 | |
Delegating constructors | N1986 | GCC 4.7 | __cpp_delegating_constructors >= 200604 |
Inheriting constructors | N2540 | GCC 4.8 | __cpp_inheriting_constructors >= 200802 |
Explicit conversion operators | N2437 | GCC 4.5 | |
New character types | N2249 | GCC 4.4 | __cpp_unicode_characters >= 200704 |
Unicode string literals | N2442 | GCC 4.5 | __cpp_unicode_literals >= 200710 |
Raw string literals | N2442 | GCC 4.5 | __cpp_raw_strings >= 200710 |
Universal character name literals | N2170 | GCC 4.5 | |
User-defined literals | N2765 | GCC 4.7 | __cpp_user_defined_literals >= 200809 |
Standard Layout Types | N2342 | GCC 4.5 | |
Defaulted and deleted functions | N2346 | GCC 4.4 | |
Extended friend declarations | N1791 | GCC 4.7 | |
Extending sizeof |
N2253 | GCC 4.4 | |
Inline namespaces | N2535 | GCC 4.4 | |
Unrestricted unions | N2544 | GCC 4.6 | |
Local and unnamed types as template arguments | N2657 | GCC 4.5 | |
Range-based for | N2930 | GCC 4.6 | __cpp_range_based_for >= 200907 |
Explicit virtual overrides | N2928
N3206 N3272 |
GCC 4.7 | |
Minimal support for garbage collection and reachability-based leak detection | N2670 | No | |
Allowing move constructors to throw [noexcept] | N3050 | GCC 4.6 | |
Defining move special member functions | N3053 | GCC 4.6 | |
Concurrency | |||
Sequence points | N2239 | Yes | |
Atomic operations | N2427 | GCC 4.4 | |
Strong Compare and Exchange | N2748 | GCC 4.5 | |
Bidirectional Fences | N2752 | GCC 4.8 | |
Memory model | N2429 | GCC 4.8 | |
Data-dependency ordering: atomics and memory model | N2664 | GCC 4.4 (memory_order_consume) |
|
Propagating exceptions | N2179 | GCC 4.4 | |
Abandoning a process and at_quick_exit | N2440 | GCC 4.8 | |
Allow atomics use in signal handlers | N2547 | Yes | |
Thread-local storage | N2659 | GCC 4.8 | |
Dynamic initialization and destruction with concurrency | N2660 | GCC 4.3 | __cpp_threadsafe_static_init >= 200806 |
C99 Features in C++11 | |||
__func__ predefined identifier |
N2340 | GCC 4.3 | |
C99 preprocessor | N1653 | GCC 4.3 | |
long long |
N1811 | GCC 4.3 | |
Extended integral types | N1988 | Yes |
export
feature which was later removed from the language.
This mode is the default in GCC versions prior to 6.1; it can be
explicitly selected with the -std=c++98
command-line flag,
or -std=gnu++98
to enable GNU extensions as well.
Copyright (C) Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.
These pages are maintained by the GCC team. Last modified 2024-08-08.