1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057 |
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <!-- Copyright (C) 1988-2017 Free Software Foundation, Inc.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.3 or
- any later version published by the Free Software Foundation; with the
- Invariant Sections being "Funding Free Software", the Front-Cover
- Texts being (a) (see below), and with the Back-Cover Texts being (b)
- (see below). A copy of the license is included in the section entitled
- "GNU Free Documentation License".
- (a) The FSF's Front-Cover Text is:
- A GNU Manual
- (b) The FSF's Back-Cover Text is:
- You have freedom to copy and modify this GNU Manual, like GNU
- software. Copies published by the Free Software Foundation raise
- funds for GNU development. -->
- <!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
- <head>
- <title>Using the GNU Compiler Collection (GCC): C++ Dialect Options</title>
- <meta name="description" content="Using the GNU Compiler Collection (GCC): C++ Dialect Options">
- <meta name="keywords" content="Using the GNU Compiler Collection (GCC): C++ Dialect Options">
- <meta name="resource-type" content="document">
- <meta name="distribution" content="global">
- <meta name="Generator" content="makeinfo">
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <link href="index.html#Top" rel="start" title="Top">
- <link href="Option-Index.html#Option-Index" rel="index" title="Option Index">
- <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
- <link href="Invoking-GCC.html#Invoking-GCC" rel="up" title="Invoking GCC">
- <link href="Objective_002dC-and-Objective_002dC_002b_002b-Dialect-Options.html#Objective_002dC-and-Objective_002dC_002b_002b-Dialect-Options" rel="next" title="Objective-C and Objective-C++ Dialect Options">
- <link href="C-Dialect-Options.html#C-Dialect-Options" rel="prev" title="C Dialect Options">
- <style type="text/css">
- <!--
- a.summary-letter {text-decoration: none}
- blockquote.smallquotation {font-size: smaller}
- div.display {margin-left: 3.2em}
- div.example {margin-left: 3.2em}
- div.indentedblock {margin-left: 3.2em}
- div.lisp {margin-left: 3.2em}
- div.smalldisplay {margin-left: 3.2em}
- div.smallexample {margin-left: 3.2em}
- div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
- div.smalllisp {margin-left: 3.2em}
- kbd {font-style:oblique}
- pre.display {font-family: inherit}
- pre.format {font-family: inherit}
- pre.menu-comment {font-family: serif}
- pre.menu-preformatted {font-family: serif}
- pre.smalldisplay {font-family: inherit; font-size: smaller}
- pre.smallexample {font-size: smaller}
- pre.smallformat {font-family: inherit; font-size: smaller}
- pre.smalllisp {font-size: smaller}
- span.nocodebreak {white-space:nowrap}
- span.nolinebreak {white-space:nowrap}
- span.roman {font-family:serif; font-weight:normal}
- span.sansserif {font-family:sans-serif; font-weight:normal}
- ul.no-bullet {list-style: none}
- -->
- </style>
- </head>
- <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
- <a name="C_002b_002b-Dialect-Options"></a>
- <div class="header">
- <p>
- Next: <a href="Objective_002dC-and-Objective_002dC_002b_002b-Dialect-Options.html#Objective_002dC-and-Objective_002dC_002b_002b-Dialect-Options" accesskey="n" rel="next">Objective-C and Objective-C++ Dialect Options</a>, Previous: <a href="C-Dialect-Options.html#C-Dialect-Options" accesskey="p" rel="prev">C Dialect Options</a>, Up: <a href="Invoking-GCC.html#Invoking-GCC" accesskey="u" rel="up">Invoking GCC</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
- </div>
- <hr>
- <a name="Options-Controlling-C_002b_002b-Dialect"></a>
- <h3 class="section">3.5 Options Controlling C++ Dialect</h3>
- <a name="index-compiler-options_002c-C_002b_002b"></a>
- <a name="index-C_002b_002b-options_002c-command_002dline"></a>
- <a name="index-options_002c-C_002b_002b"></a>
- <p>This section describes the command-line options that are only meaningful
- for C++ programs. You can also use most of the GNU compiler options
- regardless of what language your program is in. For example, you
- might compile a file <samp>firstClass.C</samp> like this:
- </p>
- <div class="smallexample">
- <pre class="smallexample">g++ -g -fstrict-enums -O -c firstClass.C
- </pre></div>
- <p>In this example, only <samp>-fstrict-enums</samp> is an option meant
- only for C++ programs; you can use the other options with any
- language supported by GCC.
- </p>
- <p>Some options for compiling C programs, such as <samp>-std</samp>, are also
- relevant for C++ programs.
- See <a href="C-Dialect-Options.html#C-Dialect-Options">Options Controlling C Dialect</a>.
- </p>
- <p>Here is a list of options that are <em>only</em> for compiling C++ programs:
- </p>
- <dl compact="compact">
- <dt><code>-fabi-version=<var>n</var></code></dt>
- <dd><a name="index-fabi_002dversion"></a>
- <p>Use version <var>n</var> of the C++ ABI. The default is version 0.
- </p>
- <p>Version 0 refers to the version conforming most closely to
- the C++ ABI specification. Therefore, the ABI obtained using version 0
- will change in different versions of G++ as ABI bugs are fixed.
- </p>
- <p>Version 1 is the version of the C++ ABI that first appeared in G++ 3.2.
- </p>
- <p>Version 2 is the version of the C++ ABI that first appeared in G++
- 3.4, and was the default through G++ 4.9.
- </p>
- <p>Version 3 corrects an error in mangling a constant address as a
- template argument.
- </p>
- <p>Version 4, which first appeared in G++ 4.5, implements a standard
- mangling for vector types.
- </p>
- <p>Version 5, which first appeared in G++ 4.6, corrects the mangling of
- attribute const/volatile on function pointer types, decltype of a
- plain decl, and use of a function parameter in the declaration of
- another parameter.
- </p>
- <p>Version 6, which first appeared in G++ 4.7, corrects the promotion
- behavior of C++11 scoped enums and the mangling of template argument
- packs, const/static_cast, prefix ++ and –, and a class scope function
- used as a template argument.
- </p>
- <p>Version 7, which first appeared in G++ 4.8, that treats nullptr_t as a
- builtin type and corrects the mangling of lambdas in default argument
- scope.
- </p>
- <p>Version 8, which first appeared in G++ 4.9, corrects the substitution
- behavior of function types with function-cv-qualifiers.
- </p>
- <p>Version 9, which first appeared in G++ 5.2, corrects the alignment of
- <code>nullptr_t</code>.
- </p>
- <p>Version 10, which first appeared in G++ 6.1, adds mangling of
- attributes that affect type identity, such as ia32 calling convention
- attributes (e.g. ‘<samp>stdcall</samp>’).
- </p>
- <p>Version 11, which first appeared in G++ 7, corrects the mangling of
- sizeof... expressions and operator names. For multiple entities with
- the same name within a function, that are declared in different scopes,
- the mangling now changes starting with the twelfth occurrence. It also
- implies <samp>-fnew-inheriting-ctors</samp>.
- </p>
- <p>See also <samp>-Wabi</samp>.
- </p>
- </dd>
- <dt><code>-fabi-compat-version=<var>n</var></code></dt>
- <dd><a name="index-fabi_002dcompat_002dversion"></a>
- <p>On targets that support strong aliases, G++
- works around mangling changes by creating an alias with the correct
- mangled name when defining a symbol with an incorrect mangled name.
- This switch specifies which ABI version to use for the alias.
- </p>
- <p>With <samp>-fabi-version=0</samp> (the default), this defaults to 8 (GCC 5
- compatibility). If another ABI version is explicitly selected, this
- defaults to 0. For compatibility with GCC versions 3.2 through 4.9,
- use <samp>-fabi-compat-version=2</samp>.
- </p>
- <p>If this option is not provided but <samp>-Wabi=<var>n</var></samp> is, that
- version is used for compatibility aliases. If this option is provided
- along with <samp>-Wabi</samp> (without the version), the version from this
- option is used for the warning.
- </p>
- </dd>
- <dt><code>-fno-access-control</code></dt>
- <dd><a name="index-fno_002daccess_002dcontrol"></a>
- <p>Turn off all access checking. This switch is mainly useful for working
- around bugs in the access control code.
- </p>
- </dd>
- <dt><code>-faligned-new</code></dt>
- <dd><a name="index-faligned_002dnew"></a>
- <p>Enable support for C++17 <code>new</code> of types that require more
- alignment than <code>void* ::operator new(std::size_t)</code> provides. A
- numeric argument such as <code>-faligned-new=32</code> can be used to
- specify how much alignment (in bytes) is provided by that function,
- but few users will need to override the default of
- <code>alignof(std::max_align_t)</code>.
- </p>
- </dd>
- <dt><code>-fcheck-new</code></dt>
- <dd><a name="index-fcheck_002dnew"></a>
- <p>Check that the pointer returned by <code>operator new</code> is non-null
- before attempting to modify the storage allocated. This check is
- normally unnecessary because the C++ standard specifies that
- <code>operator new</code> only returns <code>0</code> if it is declared
- <code>throw()</code>, in which case the compiler always checks the
- return value even without this option. In all other cases, when
- <code>operator new</code> has a non-empty exception specification, memory
- exhaustion is signalled by throwing <code>std::bad_alloc</code>. See also
- ‘<samp>new (nothrow)</samp>’.
- </p>
- </dd>
- <dt><code>-fconcepts</code></dt>
- <dd><a name="index-fconcepts"></a>
- <p>Enable support for the C++ Extensions for Concepts Technical
- Specification, ISO 19217 (2015), which allows code like
- </p>
- <div class="smallexample">
- <pre class="smallexample">template <class T> concept bool Addable = requires (T t) { t + t; };
- template <Addable T> T add (T a, T b) { return a + b; }
- </pre></div>
- </dd>
- <dt><code>-fconstexpr-depth=<var>n</var></code></dt>
- <dd><a name="index-fconstexpr_002ddepth"></a>
- <p>Set the maximum nested evaluation depth for C++11 constexpr functions
- to <var>n</var>. A limit is needed to detect endless recursion during
- constant expression evaluation. The minimum specified by the standard
- is 512.
- </p>
- </dd>
- <dt><code>-fconstexpr-loop-limit=<var>n</var></code></dt>
- <dd><a name="index-fconstexpr_002dloop_002dlimit"></a>
- <p>Set the maximum number of iterations for a loop in C++14 constexpr functions
- to <var>n</var>. A limit is needed to detect infinite loops during
- constant expression evaluation. The default is 262144 (1<<18).
- </p>
- </dd>
- <dt><code>-fdeduce-init-list</code></dt>
- <dd><a name="index-fdeduce_002dinit_002dlist"></a>
- <p>Enable deduction of a template type parameter as
- <code>std::initializer_list</code> from a brace-enclosed initializer list, i.e.
- </p>
- <div class="smallexample">
- <pre class="smallexample">template <class T> auto forward(T t) -> decltype (realfn (t))
- {
- return realfn (t);
- }
- void f()
- {
- forward({1,2}); // call forward<std::initializer_list<int>>
- }
- </pre></div>
- <p>This deduction was implemented as a possible extension to the
- originally proposed semantics for the C++11 standard, but was not part
- of the final standard, so it is disabled by default. This option is
- deprecated, and may be removed in a future version of G++.
- </p>
- </dd>
- <dt><code>-ffriend-injection</code></dt>
- <dd><a name="index-ffriend_002dinjection"></a>
- <p>Inject friend functions into the enclosing namespace, so that they are
- visible outside the scope of the class in which they are declared.
- Friend functions were documented to work this way in the old Annotated
- C++ Reference Manual.
- However, in ISO C++ a friend function that is not declared
- in an enclosing scope can only be found using argument dependent
- lookup. GCC defaults to the standard behavior.
- </p>
- <p>This option is for compatibility, and may be removed in a future
- release of G++.
- </p>
- </dd>
- <dt><code>-fno-elide-constructors</code></dt>
- <dd><a name="index-fno_002delide_002dconstructors"></a>
- <p>The C++ standard allows an implementation to omit creating a temporary
- that is only used to initialize another object of the same type.
- Specifying this option disables that optimization, and forces G++ to
- call the copy constructor in all cases. This option also causes G++
- to call trivial member functions which otherwise would be expanded inline.
- </p>
- <p>In C++17, the compiler is required to omit these temporaries, but this
- option still affects trivial member functions.
- </p>
- </dd>
- <dt><code>-fno-enforce-eh-specs</code></dt>
- <dd><a name="index-fno_002denforce_002deh_002dspecs"></a>
- <p>Don’t generate code to check for violation of exception specifications
- at run time. This option violates the C++ standard, but may be useful
- for reducing code size in production builds, much like defining
- <code>NDEBUG</code>. This does not give user code permission to throw
- exceptions in violation of the exception specifications; the compiler
- still optimizes based on the specifications, so throwing an
- unexpected exception results in undefined behavior at run time.
- </p>
- </dd>
- <dt><code>-fextern-tls-init</code></dt>
- <dt><code>-fno-extern-tls-init</code></dt>
- <dd><a name="index-fextern_002dtls_002dinit"></a>
- <a name="index-fno_002dextern_002dtls_002dinit"></a>
- <p>The C++11 and OpenMP standards allow <code>thread_local</code> and
- <code>threadprivate</code> variables to have dynamic (runtime)
- initialization. To support this, any use of such a variable goes
- through a wrapper function that performs any necessary initialization.
- When the use and definition of the variable are in the same
- translation unit, this overhead can be optimized away, but when the
- use is in a different translation unit there is significant overhead
- even if the variable doesn’t actually need dynamic initialization. If
- the programmer can be sure that no use of the variable in a
- non-defining TU needs to trigger dynamic initialization (either
- because the variable is statically initialized, or a use of the
- variable in the defining TU will be executed before any uses in
- another TU), they can avoid this overhead with the
- <samp>-fno-extern-tls-init</samp> option.
- </p>
- <p>On targets that support symbol aliases, the default is
- <samp>-fextern-tls-init</samp>. On targets that do not support symbol
- aliases, the default is <samp>-fno-extern-tls-init</samp>.
- </p>
- </dd>
- <dt><code>-ffor-scope</code></dt>
- <dt><code>-fno-for-scope</code></dt>
- <dd><a name="index-ffor_002dscope"></a>
- <a name="index-fno_002dfor_002dscope"></a>
- <p>If <samp>-ffor-scope</samp> is specified, the scope of variables declared in
- a <i>for-init-statement</i> is limited to the <code>for</code> loop itself,
- as specified by the C++ standard.
- If <samp>-fno-for-scope</samp> is specified, the scope of variables declared in
- a <i>for-init-statement</i> extends to the end of the enclosing scope,
- as was the case in old versions of G++, and other (traditional)
- implementations of C++.
- </p>
- <p>If neither flag is given, the default is to follow the standard,
- but to allow and give a warning for old-style code that would
- otherwise be invalid, or have different behavior.
- </p>
- </dd>
- <dt><code>-fno-gnu-keywords</code></dt>
- <dd><a name="index-fno_002dgnu_002dkeywords"></a>
- <p>Do not recognize <code>typeof</code> as a keyword, so that code can use this
- word as an identifier. You can use the keyword <code>__typeof__</code> instead.
- This option is implied by the strict ISO C++ dialects: <samp>-ansi</samp>,
- <samp>-std=c++98</samp>, <samp>-std=c++11</samp>, etc.
- </p>
- </dd>
- <dt><code>-fno-implicit-templates</code></dt>
- <dd><a name="index-fno_002dimplicit_002dtemplates"></a>
- <p>Never emit code for non-inline templates that are instantiated
- implicitly (i.e. by use); only emit code for explicit instantiations.
- See <a href="Template-Instantiation.html#Template-Instantiation">Template Instantiation</a>, for more information.
- </p>
- </dd>
- <dt><code>-fno-implicit-inline-templates</code></dt>
- <dd><a name="index-fno_002dimplicit_002dinline_002dtemplates"></a>
- <p>Don’t emit code for implicit instantiations of inline templates, either.
- The default is to handle inlines differently so that compiles with and
- without optimization need the same set of explicit instantiations.
- </p>
- </dd>
- <dt><code>-fno-implement-inlines</code></dt>
- <dd><a name="index-fno_002dimplement_002dinlines"></a>
- <p>To save space, do not emit out-of-line copies of inline functions
- controlled by <code>#pragma implementation</code>. This causes linker
- errors if these functions are not inlined everywhere they are called.
- </p>
- </dd>
- <dt><code>-fms-extensions</code></dt>
- <dd><a name="index-fms_002dextensions-1"></a>
- <p>Disable Wpedantic warnings about constructs used in MFC, such as implicit
- int and getting a pointer to member function via non-standard syntax.
- </p>
- </dd>
- <dt><code>-fnew-inheriting-ctors</code></dt>
- <dd><a name="index-fnew_002dinheriting_002dctors"></a>
- <p>Enable the P0136 adjustment to the semantics of C++11 constructor
- inheritance. This is part of C++17 but also considered to be a Defect
- Report against C++11 and C++14. This flag is enabled by default
- unless <samp>-fabi-version=10</samp> or lower is specified.
- </p>
- </dd>
- <dt><code>-fnew-ttp-matching</code></dt>
- <dd><a name="index-fnew_002dttp_002dmatching"></a>
- <p>Enable the P0522 resolution to Core issue 150, template template
- parameters and default arguments: this allows a template with default
- template arguments as an argument for a template template parameter
- with fewer template parameters. This flag is enabled by default for
- <samp>-std=c++1z</samp>.
- </p>
- </dd>
- <dt><code>-fno-nonansi-builtins</code></dt>
- <dd><a name="index-fno_002dnonansi_002dbuiltins"></a>
- <p>Disable built-in declarations of functions that are not mandated by
- ANSI/ISO C. These include <code>ffs</code>, <code>alloca</code>, <code>_exit</code>,
- <code>index</code>, <code>bzero</code>, <code>conjf</code>, and other related functions.
- </p>
- </dd>
- <dt><code>-fnothrow-opt</code></dt>
- <dd><a name="index-fnothrow_002dopt"></a>
- <p>Treat a <code>throw()</code> exception specification as if it were a
- <code>noexcept</code> specification to reduce or eliminate the text size
- overhead relative to a function with no exception specification. If
- the function has local variables of types with non-trivial
- destructors, the exception specification actually makes the
- function smaller because the EH cleanups for those variables can be
- optimized away. The semantic effect is that an exception thrown out of
- a function with such an exception specification results in a call
- to <code>terminate</code> rather than <code>unexpected</code>.
- </p>
- </dd>
- <dt><code>-fno-operator-names</code></dt>
- <dd><a name="index-fno_002doperator_002dnames"></a>
- <p>Do not treat the operator name keywords <code>and</code>, <code>bitand</code>,
- <code>bitor</code>, <code>compl</code>, <code>not</code>, <code>or</code> and <code>xor</code> as
- synonyms as keywords.
- </p>
- </dd>
- <dt><code>-fno-optional-diags</code></dt>
- <dd><a name="index-fno_002doptional_002ddiags"></a>
- <p>Disable diagnostics that the standard says a compiler does not need to
- issue. Currently, the only such diagnostic issued by G++ is the one for
- a name having multiple meanings within a class.
- </p>
- </dd>
- <dt><code>-fpermissive</code></dt>
- <dd><a name="index-fpermissive"></a>
- <p>Downgrade some diagnostics about nonconformant code from errors to
- warnings. Thus, using <samp>-fpermissive</samp> allows some
- nonconforming code to compile.
- </p>
- </dd>
- <dt><code>-fno-pretty-templates</code></dt>
- <dd><a name="index-fno_002dpretty_002dtemplates"></a>
- <p>When an error message refers to a specialization of a function
- template, the compiler normally prints the signature of the
- template followed by the template arguments and any typedefs or
- typenames in the signature (e.g. <code>void f(T) [with T = int]</code>
- rather than <code>void f(int)</code>) so that it’s clear which template is
- involved. When an error message refers to a specialization of a class
- template, the compiler omits any template arguments that match
- the default template arguments for that template. If either of these
- behaviors make it harder to understand the error message rather than
- easier, you can use <samp>-fno-pretty-templates</samp> to disable them.
- </p>
- </dd>
- <dt><code>-frepo</code></dt>
- <dd><a name="index-frepo"></a>
- <p>Enable automatic template instantiation at link time. This option also
- implies <samp>-fno-implicit-templates</samp>. See <a href="Template-Instantiation.html#Template-Instantiation">Template Instantiation</a>, for more information.
- </p>
- </dd>
- <dt><code>-fno-rtti</code></dt>
- <dd><a name="index-fno_002drtti"></a>
- <p>Disable generation of information about every class with virtual
- functions for use by the C++ run-time type identification features
- (<code>dynamic_cast</code> and <code>typeid</code>). If you don’t use those parts
- of the language, you can save some space by using this flag. Note that
- exception handling uses the same information, but G++ generates it as
- needed. The <code>dynamic_cast</code> operator can still be used for casts that
- do not require run-time type information, i.e. casts to <code>void *</code> or to
- unambiguous base classes.
- </p>
- </dd>
- <dt><code>-fsized-deallocation</code></dt>
- <dd><a name="index-fsized_002ddeallocation"></a>
- <p>Enable the built-in global declarations
- </p><div class="smallexample">
- <pre class="smallexample">void operator delete (void *, std::size_t) noexcept;
- void operator delete[] (void *, std::size_t) noexcept;
- </pre></div>
- <p>as introduced in C++14. This is useful for user-defined replacement
- deallocation functions that, for example, use the size of the object
- to make deallocation faster. Enabled by default under
- <samp>-std=c++14</samp> and above. The flag <samp>-Wsized-deallocation</samp>
- warns about places that might want to add a definition.
- </p>
- </dd>
- <dt><code>-fstrict-enums</code></dt>
- <dd><a name="index-fstrict_002denums"></a>
- <p>Allow the compiler to optimize using the assumption that a value of
- enumerated type can only be one of the values of the enumeration (as
- defined in the C++ standard; basically, a value that can be
- represented in the minimum number of bits needed to represent all the
- enumerators). This assumption may not be valid if the program uses a
- cast to convert an arbitrary integer value to the enumerated type.
- </p>
- </dd>
- <dt><code>-fstrong-eval-order</code></dt>
- <dd><a name="index-fstrong_002deval_002dorder"></a>
- <p>Evaluate member access, array subscripting, and shift expressions in
- left-to-right order, and evaluate assignment in right-to-left order,
- as adopted for C++17. Enabled by default with <samp>-std=c++1z</samp>.
- <samp>-fstrong-eval-order=some</samp> enables just the ordering of member
- access and shift expressions, and is the default without
- <samp>-std=c++1z</samp>.
- </p>
- </dd>
- <dt><code>-ftemplate-backtrace-limit=<var>n</var></code></dt>
- <dd><a name="index-ftemplate_002dbacktrace_002dlimit"></a>
- <p>Set the maximum number of template instantiation notes for a single
- warning or error to <var>n</var>. The default value is 10.
- </p>
- </dd>
- <dt><code>-ftemplate-depth=<var>n</var></code></dt>
- <dd><a name="index-ftemplate_002ddepth"></a>
- <p>Set the maximum instantiation depth for template classes to <var>n</var>.
- A limit on the template instantiation depth is needed to detect
- endless recursions during template class instantiation. ANSI/ISO C++
- conforming programs must not rely on a maximum depth greater than 17
- (changed to 1024 in C++11). The default value is 900, as the compiler
- can run out of stack space before hitting 1024 in some situations.
- </p>
- </dd>
- <dt><code>-fno-threadsafe-statics</code></dt>
- <dd><a name="index-fno_002dthreadsafe_002dstatics"></a>
- <p>Do not emit the extra code to use the routines specified in the C++
- ABI for thread-safe initialization of local statics. You can use this
- option to reduce code size slightly in code that doesn’t need to be
- thread-safe.
- </p>
- </dd>
- <dt><code>-fuse-cxa-atexit</code></dt>
- <dd><a name="index-fuse_002dcxa_002datexit"></a>
- <p>Register destructors for objects with static storage duration with the
- <code>__cxa_atexit</code> function rather than the <code>atexit</code> function.
- This option is required for fully standards-compliant handling of static
- destructors, but only works if your C library supports
- <code>__cxa_atexit</code>.
- </p>
- </dd>
- <dt><code>-fno-use-cxa-get-exception-ptr</code></dt>
- <dd><a name="index-fno_002duse_002dcxa_002dget_002dexception_002dptr"></a>
- <p>Don’t use the <code>__cxa_get_exception_ptr</code> runtime routine. This
- causes <code>std::uncaught_exception</code> to be incorrect, but is necessary
- if the runtime routine is not available.
- </p>
- </dd>
- <dt><code>-fvisibility-inlines-hidden</code></dt>
- <dd><a name="index-fvisibility_002dinlines_002dhidden"></a>
- <p>This switch declares that the user does not attempt to compare
- pointers to inline functions or methods where the addresses of the two functions
- are taken in different shared objects.
- </p>
- <p>The effect of this is that GCC may, effectively, mark inline methods with
- <code>__attribute__ ((visibility ("hidden")))</code> so that they do not
- appear in the export table of a DSO and do not require a PLT indirection
- when used within the DSO. Enabling this option can have a dramatic effect
- on load and link times of a DSO as it massively reduces the size of the
- dynamic export table when the library makes heavy use of templates.
- </p>
- <p>The behavior of this switch is not quite the same as marking the
- methods as hidden directly, because it does not affect static variables
- local to the function or cause the compiler to deduce that
- the function is defined in only one shared object.
- </p>
- <p>You may mark a method as having a visibility explicitly to negate the
- effect of the switch for that method. For example, if you do want to
- compare pointers to a particular inline method, you might mark it as
- having default visibility. Marking the enclosing class with explicit
- visibility has no effect.
- </p>
- <p>Explicitly instantiated inline methods are unaffected by this option
- as their linkage might otherwise cross a shared library boundary.
- See <a href="Template-Instantiation.html#Template-Instantiation">Template Instantiation</a>.
- </p>
- </dd>
- <dt><code>-fvisibility-ms-compat</code></dt>
- <dd><a name="index-fvisibility_002dms_002dcompat"></a>
- <p>This flag attempts to use visibility settings to make GCC’s C++
- linkage model compatible with that of Microsoft Visual Studio.
- </p>
- <p>The flag makes these changes to GCC’s linkage model:
- </p>
- <ol>
- <li> It sets the default visibility to <code>hidden</code>, like
- <samp>-fvisibility=hidden</samp>.
- </li><li> Types, but not their members, are not hidden by default.
- </li><li> The One Definition Rule is relaxed for types without explicit
- visibility specifications that are defined in more than one
- shared object: those declarations are permitted if they are
- permitted when this option is not used.
- </li></ol>
- <p>In new code it is better to use <samp>-fvisibility=hidden</samp> and
- export those classes that are intended to be externally visible.
- Unfortunately it is possible for code to rely, perhaps accidentally,
- on the Visual Studio behavior.
- </p>
- <p>Among the consequences of these changes are that static data members
- of the same type with the same name but defined in different shared
- objects are different, so changing one does not change the other;
- and that pointers to function members defined in different shared
- objects may not compare equal. When this flag is given, it is a
- violation of the ODR to define types with the same name differently.
- </p>
- </dd>
- <dt><code>-fno-weak</code></dt>
- <dd><a name="index-fno_002dweak"></a>
- <p>Do not use weak symbol support, even if it is provided by the linker.
- By default, G++ uses weak symbols if they are available. This
- option exists only for testing, and should not be used by end-users;
- it results in inferior code and has no benefits. This option may
- be removed in a future release of G++.
- </p>
- </dd>
- <dt><code>-nostdinc++</code></dt>
- <dd><a name="index-nostdinc_002b_002b"></a>
- <p>Do not search for header files in the standard directories specific to
- C++, but do still search the other standard directories. (This option
- is used when building the C++ library.)
- </p></dd>
- </dl>
- <p>In addition, these optimization, warning, and code generation options
- have meanings only for C++ programs:
- </p>
- <dl compact="compact">
- <dt><code>-Wabi <span class="roman">(C, Objective-C, C++ and Objective-C++ only)</span></code></dt>
- <dd><a name="index-Wabi"></a>
- <a name="index-Wno_002dabi"></a>
- <p>Warn when G++ it generates code that is probably not compatible with
- the vendor-neutral C++ ABI. Since G++ now defaults to updating the
- ABI with each major release, normally <samp>-Wabi</samp> will warn only if
- there is a check added later in a release series for an ABI issue
- discovered since the initial release. <samp>-Wabi</samp> will warn about
- more things if an older ABI version is selected (with
- <samp>-fabi-version=<var>n</var></samp>).
- </p>
- <p><samp>-Wabi</samp> can also be used with an explicit version number to
- warn about compatibility with a particular <samp>-fabi-version</samp>
- level, e.g. <samp>-Wabi=2</samp> to warn about changes relative to
- <samp>-fabi-version=2</samp>.
- </p>
- <p>If an explicit version number is provided and
- <samp>-fabi-compat-version</samp> is not specified, the version number
- from this option is used for compatibility aliases. If no explicit
- version number is provided with this option, but
- <samp>-fabi-compat-version</samp> is specified, that version number is
- used for ABI warnings.
- </p>
- <p>Although an effort has been made to warn about
- all such cases, there are probably some cases that are not warned about,
- even though G++ is generating incompatible code. There may also be
- cases where warnings are emitted even though the code that is generated
- is compatible.
- </p>
- <p>You should rewrite your code to avoid these warnings if you are
- concerned about the fact that code generated by G++ may not be binary
- compatible with code generated by other compilers.
- </p>
- <p>Known incompatibilities in <samp>-fabi-version=2</samp> (which was the
- default from GCC 3.4 to 4.9) include:
- </p>
- <ul>
- <li> A template with a non-type template parameter of reference type was
- mangled incorrectly:
- <div class="smallexample">
- <pre class="smallexample">extern int N;
- template <int &> struct S {};
- void n (S<N>) {2}
- </pre></div>
- <p>This was fixed in <samp>-fabi-version=3</samp>.
- </p>
- </li><li> SIMD vector types declared using <code>__attribute ((vector_size))</code> were
- mangled in a non-standard way that does not allow for overloading of
- functions taking vectors of different sizes.
- <p>The mangling was changed in <samp>-fabi-version=4</samp>.
- </p>
- </li><li> <code>__attribute ((const))</code> and <code>noreturn</code> were mangled as type
- qualifiers, and <code>decltype</code> of a plain declaration was folded away.
- <p>These mangling issues were fixed in <samp>-fabi-version=5</samp>.
- </p>
- </li><li> Scoped enumerators passed as arguments to a variadic function are
- promoted like unscoped enumerators, causing <code>va_arg</code> to complain.
- On most targets this does not actually affect the parameter passing
- ABI, as there is no way to pass an argument smaller than <code>int</code>.
- <p>Also, the ABI changed the mangling of template argument packs,
- <code>const_cast</code>, <code>static_cast</code>, prefix increment/decrement, and
- a class scope function used as a template argument.
- </p>
- <p>These issues were corrected in <samp>-fabi-version=6</samp>.
- </p>
- </li><li> Lambdas in default argument scope were mangled incorrectly, and the
- ABI changed the mangling of <code>nullptr_t</code>.
- <p>These issues were corrected in <samp>-fabi-version=7</samp>.
- </p>
- </li><li> When mangling a function type with function-cv-qualifiers, the
- un-qualified function type was incorrectly treated as a substitution
- candidate.
- <p>This was fixed in <samp>-fabi-version=8</samp>, the default for GCC 5.1.
- </p>
- </li><li> <code>decltype(nullptr)</code> incorrectly had an alignment of 1, leading to
- unaligned accesses. Note that this did not affect the ABI of a
- function with a <code>nullptr_t</code> parameter, as parameters have a
- minimum alignment.
- <p>This was fixed in <samp>-fabi-version=9</samp>, the default for GCC 5.2.
- </p>
- </li><li> Target-specific attributes that affect the identity of a type, such as
- ia32 calling conventions on a function type (stdcall, regparm, etc.),
- did not affect the mangled name, leading to name collisions when
- function pointers were used as template arguments.
- <p>This was fixed in <samp>-fabi-version=10</samp>, the default for GCC 6.1.
- </p>
- </li></ul>
- <p>It also warns about psABI-related changes. The known psABI changes at this
- point include:
- </p>
- <ul>
- <li> For SysV/x86-64, unions with <code>long double</code> members are
- passed in memory as specified in psABI. For example:
- <div class="smallexample">
- <pre class="smallexample">union U {
- long double ld;
- int i;
- };
- </pre></div>
- <p><code>union U</code> is always passed in memory.
- </p>
- </li></ul>
- </dd>
- <dt><code>-Wabi-tag <span class="roman">(C++ and Objective-C++ only)</span></code></dt>
- <dd><a name="index-Wabi_002dtag"></a>
- <a name="index-_002dWabi_002dtag"></a>
- <p>Warn when a type with an ABI tag is used in a context that does not
- have that ABI tag. See <a href="C_002b_002b-Attributes.html#C_002b_002b-Attributes">C++ Attributes</a> for more information
- about ABI tags.
- </p>
- </dd>
- <dt><code>-Wctor-dtor-privacy <span class="roman">(C++ and Objective-C++ only)</span></code></dt>
- <dd><a name="index-Wctor_002ddtor_002dprivacy"></a>
- <a name="index-Wno_002dctor_002ddtor_002dprivacy"></a>
- <p>Warn when a class seems unusable because all the constructors or
- destructors in that class are private, and it has neither friends nor
- public static member functions. Also warn if there are no non-private
- methods, and there’s at least one private member function that isn’t
- a constructor or destructor.
- </p>
- </dd>
- <dt><code>-Wdelete-non-virtual-dtor <span class="roman">(C++ and Objective-C++ only)</span></code></dt>
- <dd><a name="index-Wdelete_002dnon_002dvirtual_002ddtor"></a>
- <a name="index-Wno_002ddelete_002dnon_002dvirtual_002ddtor"></a>
- <p>Warn when <code>delete</code> is used to destroy an instance of a class that
- has virtual functions and non-virtual destructor. It is unsafe to delete
- an instance of a derived class through a pointer to a base class if the
- base class does not have a virtual destructor. This warning is enabled
- by <samp>-Wall</samp>.
- </p>
- </dd>
- <dt><code>-Wliteral-suffix <span class="roman">(C++ and Objective-C++ only)</span></code></dt>
- <dd><a name="index-Wliteral_002dsuffix"></a>
- <a name="index-Wno_002dliteral_002dsuffix"></a>
- <p>Warn when a string or character literal is followed by a ud-suffix which does
- not begin with an underscore. As a conforming extension, GCC treats such
- suffixes as separate preprocessing tokens in order to maintain backwards
- compatibility with code that uses formatting macros from <code><inttypes.h></code>.
- For example:
- </p>
- <div class="smallexample">
- <pre class="smallexample">#define __STDC_FORMAT_MACROS
- #include <inttypes.h>
- #include <stdio.h>
- int main() {
- int64_t i64 = 123;
- printf("My int64: %" PRId64"\n", i64);
- }
- </pre></div>
- <p>In this case, <code>PRId64</code> is treated as a separate preprocessing token.
- </p>
- <p>Additionally, warn when a user-defined literal operator is declared with
- a literal suffix identifier that doesn’t begin with an underscore. Literal
- suffix identifiers that don’t begin with an underscore are reserved for
- future standardization.
- </p>
- <p>This warning is enabled by default.
- </p>
- </dd>
- <dt><code>-Wlto-type-mismatch</code></dt>
- <dd><a name="index-Wlto_002dtype_002dmismatch"></a>
- <a name="index-Wno_002dlto_002dtype_002dmismatch"></a>
- <p>During the link-time optimization warn about type mismatches in
- global declarations from different compilation units.
- Requires <samp>-flto</samp> to be enabled. Enabled by default.
- </p>
- </dd>
- <dt><code>-Wno-narrowing <span class="roman">(C++ and Objective-C++ only)</span></code></dt>
- <dd><a name="index-Wnarrowing"></a>
- <a name="index-Wno_002dnarrowing"></a>
- <p>For C++11 and later standards, narrowing conversions are diagnosed by default,
- as required by the standard. A narrowing conversion from a constant produces
- an error, and a narrowing conversion from a non-constant produces a warning,
- but <samp>-Wno-narrowing</samp> suppresses the diagnostic.
- Note that this does not affect the meaning of well-formed code;
- narrowing conversions are still considered ill-formed in SFINAE contexts.
- </p>
- <p>With <samp>-Wnarrowing</samp> in C++98, warn when a narrowing
- conversion prohibited by C++11 occurs within
- ‘<samp>{ }</samp>’, e.g.
- </p>
- <div class="smallexample">
- <pre class="smallexample">int i = { 2.2 }; // error: narrowing from double to int
- </pre></div>
- <p>This flag is included in <samp>-Wall</samp> and <samp>-Wc++11-compat</samp>.
- </p>
- </dd>
- <dt><code>-Wnoexcept <span class="roman">(C++ and Objective-C++ only)</span></code></dt>
- <dd><a name="index-Wnoexcept"></a>
- <a name="index-Wno_002dnoexcept"></a>
- <p>Warn when a noexcept-expression evaluates to false because of a call
- to a function that does not have a non-throwing exception
- specification (i.e. <code>throw()</code> or <code>noexcept</code>) but is known by
- the compiler to never throw an exception.
- </p>
- </dd>
- <dt><code>-Wnoexcept-type <span class="roman">(C++ and Objective-C++ only)</span></code></dt>
- <dd><a name="index-Wnoexcept_002dtype"></a>
- <a name="index-Wno_002dnoexcept_002dtype"></a>
- <p>Warn if the C++1z feature making <code>noexcept</code> part of a function
- type changes the mangled name of a symbol relative to C++14. Enabled
- by <samp>-Wabi</samp> and <samp>-Wc++1z-compat</samp>.
- </p>
- <div class="smallexample">
- <pre class="smallexample">template <class T> void f(T t) { t(); };
- void g() noexcept;
- void h() { f(g); } // in C++14 calls f<void(*)()>, in C++1z calls f<void(*)()noexcept>
- </pre></div>
- </dd>
- <dt><code>-Wnon-virtual-dtor <span class="roman">(C++ and Objective-C++ only)</span></code></dt>
- <dd><a name="index-Wnon_002dvirtual_002ddtor"></a>
- <a name="index-Wno_002dnon_002dvirtual_002ddtor"></a>
- <p>Warn when a class has virtual functions and an accessible non-virtual
- destructor itself or in an accessible polymorphic base class, in which
- case it is possible but unsafe to delete an instance of a derived
- class through a pointer to the class itself or base class. This
- warning is automatically enabled if <samp>-Weffc++</samp> is specified.
- </p>
- </dd>
- <dt><code>-Wregister <span class="roman">(C++ and Objective-C++ only)</span></code></dt>
- <dd><a name="index-Wregister"></a>
- <a name="index-Wno_002dregister"></a>
- <p>Warn on uses of the <code>register</code> storage class specifier, except
- when it is part of the GNU <a href="Explicit-Register-Variables.html#Explicit-Register-Variables">Explicit Register Variables</a> extension.
- The use of the <code>register</code> keyword as storage class specifier has
- been deprecated in C++11 and removed in C++17.
- Enabled by default with <samp>-std=c++1z</samp>.
- </p>
- </dd>
- <dt><code>-Wreorder <span class="roman">(C++ and Objective-C++ only)</span></code></dt>
- <dd><a name="index-Wreorder"></a>
- <a name="index-Wno_002dreorder"></a>
- <a name="index-reordering_002c-warning"></a>
- <a name="index-warning-for-reordering-of-member-initializers"></a>
- <p>Warn when the order of member initializers given in the code does not
- match the order in which they must be executed. For instance:
- </p>
- <div class="smallexample">
- <pre class="smallexample">struct A {
- int i;
- int j;
- A(): j (0), i (1) { }
- };
- </pre></div>
- <p>The compiler rearranges the member initializers for <code>i</code>
- and <code>j</code> to match the declaration order of the members, emitting
- a warning to that effect. This warning is enabled by <samp>-Wall</samp>.
- </p>
- </dd>
- <dt><code>-fext-numeric-literals <span class="roman">(C++ and Objective-C++ only)</span></code></dt>
- <dd><a name="index-fext_002dnumeric_002dliterals"></a>
- <a name="index-fno_002dext_002dnumeric_002dliterals"></a>
- <p>Accept imaginary, fixed-point, or machine-defined
- literal number suffixes as GNU extensions.
- When this option is turned off these suffixes are treated
- as C++11 user-defined literal numeric suffixes.
- This is on by default for all pre-C++11 dialects and all GNU dialects:
- <samp>-std=c++98</samp>, <samp>-std=gnu++98</samp>, <samp>-std=gnu++11</samp>,
- <samp>-std=gnu++14</samp>.
- This option is off by default
- for ISO C++11 onwards (<samp>-std=c++11</samp>, ...).
- </p></dd>
- </dl>
- <p>The following <samp>-W…</samp> options are not affected by <samp>-Wall</samp>.
- </p>
- <dl compact="compact">
- <dt><code>-Weffc++ <span class="roman">(C++ and Objective-C++ only)</span></code></dt>
- <dd><a name="index-Weffc_002b_002b"></a>
- <a name="index-Wno_002deffc_002b_002b"></a>
- <p>Warn about violations of the following style guidelines from Scott Meyers’
- <cite>Effective C++</cite> series of books:
- </p>
- <ul>
- <li> Define a copy constructor and an assignment operator for classes
- with dynamically-allocated memory.
- </li><li> Prefer initialization to assignment in constructors.
- </li><li> Have <code>operator=</code> return a reference to <code>*this</code>.
- </li><li> Don’t try to return a reference when you must return an object.
- </li><li> Distinguish between prefix and postfix forms of increment and
- decrement operators.
- </li><li> Never overload <code>&&</code>, <code>||</code>, or <code>,</code>.
- </li></ul>
- <p>This option also enables <samp>-Wnon-virtual-dtor</samp>, which is also
- one of the effective C++ recommendations. However, the check is
- extended to warn about the lack of virtual destructor in accessible
- non-polymorphic bases classes too.
- </p>
- <p>When selecting this option, be aware that the standard library
- headers do not obey all of these guidelines; use ‘<samp>grep -v</samp>’
- to filter out those warnings.
- </p>
- </dd>
- <dt><code>-Wstrict-null-sentinel <span class="roman">(C++ and Objective-C++ only)</span></code></dt>
- <dd><a name="index-Wstrict_002dnull_002dsentinel"></a>
- <a name="index-Wno_002dstrict_002dnull_002dsentinel"></a>
- <p>Warn about the use of an uncasted <code>NULL</code> as sentinel. When
- compiling only with GCC this is a valid sentinel, as <code>NULL</code> is defined
- to <code>__null</code>. Although it is a null pointer constant rather than a
- null pointer, it is guaranteed to be of the same size as a pointer.
- But this use is not portable across different compilers.
- </p>
- </dd>
- <dt><code>-Wno-non-template-friend <span class="roman">(C++ and Objective-C++ only)</span></code></dt>
- <dd><a name="index-Wno_002dnon_002dtemplate_002dfriend"></a>
- <a name="index-Wnon_002dtemplate_002dfriend"></a>
- <p>Disable warnings when non-template friend functions are declared
- within a template. In very old versions of GCC that predate implementation
- of the ISO standard, declarations such as
- ‘<samp>friend int foo(int)</samp>’, where the name of the friend is an unqualified-id,
- could be interpreted as a particular specialization of a template
- function; the warning exists to diagnose compatibility problems,
- and is enabled by default.
- </p>
- </dd>
- <dt><code>-Wold-style-cast <span class="roman">(C++ and Objective-C++ only)</span></code></dt>
- <dd><a name="index-Wold_002dstyle_002dcast"></a>
- <a name="index-Wno_002dold_002dstyle_002dcast"></a>
- <p>Warn if an old-style (C-style) cast to a non-void type is used within
- a C++ program. The new-style casts (<code>dynamic_cast</code>,
- <code>static_cast</code>, <code>reinterpret_cast</code>, and <code>const_cast</code>) are
- less vulnerable to unintended effects and much easier to search for.
- </p>
- </dd>
- <dt><code>-Woverloaded-virtual <span class="roman">(C++ and Objective-C++ only)</span></code></dt>
- <dd><a name="index-Woverloaded_002dvirtual"></a>
- <a name="index-Wno_002doverloaded_002dvirtual"></a>
- <a name="index-overloaded-virtual-function_002c-warning"></a>
- <a name="index-warning-for-overloaded-virtual-function"></a>
- <p>Warn when a function declaration hides virtual functions from a
- base class. For example, in:
- </p>
- <div class="smallexample">
- <pre class="smallexample">struct A {
- virtual void f();
- };
- struct B: public A {
- void f(int);
- };
- </pre></div>
- <p>the <code>A</code> class version of <code>f</code> is hidden in <code>B</code>, and code
- like:
- </p>
- <div class="smallexample">
- <pre class="smallexample">B* b;
- b->f();
- </pre></div>
- <p>fails to compile.
- </p>
- </dd>
- <dt><code>-Wno-pmf-conversions <span class="roman">(C++ and Objective-C++ only)</span></code></dt>
- <dd><a name="index-Wno_002dpmf_002dconversions"></a>
- <a name="index-Wpmf_002dconversions"></a>
- <p>Disable the diagnostic for converting a bound pointer to member function
- to a plain pointer.
- </p>
- </dd>
- <dt><code>-Wsign-promo <span class="roman">(C++ and Objective-C++ only)</span></code></dt>
- <dd><a name="index-Wsign_002dpromo"></a>
- <a name="index-Wno_002dsign_002dpromo"></a>
- <p>Warn when overload resolution chooses a promotion from unsigned or
- enumerated type to a signed type, over a conversion to an unsigned type of
- the same size. Previous versions of G++ tried to preserve
- unsignedness, but the standard mandates the current behavior.
- </p>
- </dd>
- <dt><code>-Wtemplates <span class="roman">(C++ and Objective-C++ only)</span></code></dt>
- <dd><a name="index-Wtemplates"></a>
- <p>Warn when a primary template declaration is encountered. Some coding
- rules disallow templates, and this may be used to enforce that rule.
- The warning is inactive inside a system header file, such as the STL, so
- one can still use the STL. One may also instantiate or specialize
- templates.
- </p>
- </dd>
- <dt><code>-Wmultiple-inheritance <span class="roman">(C++ and Objective-C++ only)</span></code></dt>
- <dd><a name="index-Wmultiple_002dinheritance"></a>
- <p>Warn when a class is defined with multiple direct base classes. Some
- coding rules disallow multiple inheritance, and this may be used to
- enforce that rule. The warning is inactive inside a system header file,
- such as the STL, so one can still use the STL. One may also define
- classes that indirectly use multiple inheritance.
- </p>
- </dd>
- <dt><code>-Wvirtual-inheritance</code></dt>
- <dd><a name="index-Wvirtual_002dinheritance"></a>
- <p>Warn when a class is defined with a virtual direct base class. Some
- coding rules disallow multiple inheritance, and this may be used to
- enforce that rule. The warning is inactive inside a system header file,
- such as the STL, so one can still use the STL. One may also define
- classes that indirectly use virtual inheritance.
- </p>
- </dd>
- <dt><code>-Wnamespaces</code></dt>
- <dd><a name="index-Wnamespaces"></a>
- <p>Warn when a namespace definition is opened. Some coding rules disallow
- namespaces, and this may be used to enforce that rule. The warning is
- inactive inside a system header file, such as the STL, so one can still
- use the STL. One may also use using directives and qualified names.
- </p>
- </dd>
- <dt><code>-Wno-terminate <span class="roman">(C++ and Objective-C++ only)</span></code></dt>
- <dd><a name="index-Wterminate"></a>
- <a name="index-Wno_002dterminate"></a>
- <p>Disable the warning about a throw-expression that will immediately
- result in a call to <code>terminate</code>.
- </p></dd>
- </dl>
- <hr>
- <div class="header">
- <p>
- Next: <a href="Objective_002dC-and-Objective_002dC_002b_002b-Dialect-Options.html#Objective_002dC-and-Objective_002dC_002b_002b-Dialect-Options" accesskey="n" rel="next">Objective-C and Objective-C++ Dialect Options</a>, Previous: <a href="C-Dialect-Options.html#C-Dialect-Options" accesskey="p" rel="prev">C Dialect Options</a>, Up: <a href="Invoking-GCC.html#Invoking-GCC" accesskey="u" rel="up">Invoking GCC</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
- </div>
- </body>
- </html>
|