From: redi Date: Wed, 13 Jan 2016 20:30:34 +0000 (+0000) Subject: Improve documentation of -std option for C++ X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6a5ff97e84f66c9b65ae33adbeafdd3d7e7c459d;p=thirdparty%2Fgcc.git Improve documentation of -std option for C++ * doc/invoke.texi (C Dialect Options): Adjust -std default for C++. (C++ Dialect Options): Add cross-reference to -std option. * doc/standards.texi (C++ Language): Document C++14 support. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@232349 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 784d5b18613c..f4048fee8302 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-01-13 Jonathan Wakely + + * doc/invoke.texi (C Dialect Options): Adjust -std default for C++. + (C++ Dialect Options): Add cross-reference to -std option. + * doc/standards.texi (C++ Language): Document C++14 support. + 2016-01-13 Michael Meissner * config/rs6000/rs6000-builtin.def (BU_FLOAT128_2): Add support diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index d532aab3197d..207df1202260 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -1784,8 +1784,7 @@ additional defect reports. Same as @option{-ansi} for C++ code. @item gnu++98 @itemx gnu++03 -GNU dialect of @option{-std=c++98}. This is the default for -C++ code. +GNU dialect of @option{-std=c++98}. @item c++11 @itemx c++0x @@ -1805,6 +1804,7 @@ The name @samp{c++1y} is deprecated. @item gnu++14 @itemx gnu++1y GNU dialect of @option{-std=c++14}. +This is the default for C++ code. The name @samp{gnu++1y} is deprecated. @item c++1z @@ -2132,6 +2132,10 @@ In this example, only @option{-fstrict-enums} is an option meant only for C++ programs; you can use the other options with any language supported by GCC@. +Some options for compiling C programs, such as @option{-std}, are also +relevant for C++ programs. +@xref{C Dialect Options,,Options Controlling C Dialect}. + Here is a list of options that are @emph{only} for compiling C++ programs: @table @gcctabopt @@ -2317,7 +2321,8 @@ otherwise be invalid, or have different behavior. @opindex fno-gnu-keywords Do not recognize @code{typeof} as a keyword, so that code can use this word as an identifier. You can use the keyword @code{__typeof__} instead. -@option{-ansi} implies @option{-fno-gnu-keywords}. +This option is implied by the strict ISO C++ dialects: @option{-ansi}, +@option{-std=c++98}, @option{-std=c++11}, etc. @item -fno-implicit-templates @opindex fno-implicit-templates diff --git a/gcc/doc/standards.texi b/gcc/doc/standards.texi index 55d57d4ed87c..e02907766305 100644 --- a/gcc/doc/standards.texi +++ b/gcc/doc/standards.texi @@ -105,7 +105,7 @@ standard version were referred to as @dfn{C1X}.) By default, GCC provides some extensions to the C language that on rare occasions conflict with the C standard. @xref{C Extensions,,Extensions to the C Language Family}. Use of the -@option{-std} options listed above will disable these extensions where +@option{-std} options listed above disables these extensions where they conflict with the C standard version selected. You may also select an extended version of the C language explicitly with @option{-std=gnu90} (for C90 with GNU extensions), @option{-std=gnu99} @@ -171,8 +171,8 @@ information concerning the history of C that is available online, see @section C++ Language -GCC supports the original ISO C++ standard (1998) and contains -experimental support for the second ISO C++ standard (2011). +GCC supports the original ISO C++ standard published in 1998, +and the 2011 and 2014 revisions. The original ISO C++ standard was published as the ISO standard (ISO/IEC 14882:1998) and amended by a Technical Corrigenda published in 2003 @@ -187,26 +187,46 @@ warnings). A revised ISO C++ standard was published in 2011 as ISO/IEC 14882:2011, and is referred to as C++11; before its publication it was -commonly referred to as C++0x. C++11 contains several -changes to the C++ language, most of which have been implemented in an -experimental C++11 mode in GCC@. For information -regarding the C++11 features available in the experimental C++11 mode, -see @uref{http://gcc.gnu.org/projects/@/cxx0x.html}. To select this -standard in GCC, use the option @option{-std=c++11}; to obtain all the -diagnostics required by the standard, you should also specify -@option{-pedantic} (or @option{-pedantic-errors} if you want them to -be errors rather than warnings). +commonly referred to as C++0x. C++11 contains several changes to the +C++ language, all of which have been implemented in GCC@. For details +see @uref{https://gcc.gnu.org/projects/@/cxx0x.html}. +To select this standard in GCC, use the option @option{-std=c++11}. + +Another revised ISO C++ standard was published in 2014 as ISO/IEC +14882:2014, and is referred to as C++14; before its publication it was +sometimes referred to as C++1y. C++14 contains several further +changes to the C++ language, all of which have been implemented in GCC@. +For details see @uref{https://gcc.gnu.org/projects/@/cxx1y.html}. +To select this standard in GCC, use the option @option{-std=c++14}. + +GCC also supports the C++ Concepts Technical Specification, +ISO/IEC TS 19217:2015, which allows constraints to be defined for templates, +allowing template arguments to be checked and for templates to be +overloaded or specialized based on the constraints. Support for C++ Concepts +is included in an experimental C++1z mode that corresponds to the next +revision of the ISO C++ standard, expected to be published in 2017. To enable +C++1z support in GCC, use the option @option{-std=c++17} or +@option{-std=c++1z}. More information about the C++ standards is available on the ISO C++ committee's web site at @uref{http://www.open-std.org/@/jtc1/@/sc22/@/wg21/}. -By default, GCC provides some extensions to the C++ language; @xref{C++ +To obtain all the diagnostics required by any of the standard versions +described above you should specify @option{-pedantic} +or @option{-pedantic-errors}, otherwise GCC will allow some non-ISO C++ +features as extensions. @xref{Warning Options}. + +By default, GCC also provides some additional extensions to the C++ language +that on rare occasions conflict with the C++ standard. @xref{C++ Dialect Options,Options Controlling C++ Dialect}. Use of the -@option{-std} option listed above will disable these extensions. You -may also select an extended version of the C++ language explicitly with -@option{-std=gnu++98} (for C++98 with GNU extensions) or -@option{-std=gnu++11} (for C++11 with GNU extensions). The default, if -no C++ language dialect options are given, is @option{-std=gnu++98}. +@option{-std} options listed above disables these extensions where they +they conflict with the C++ standard version selected. You may also +select an extended version of the C++ language explicitly with +@option{-std=gnu++98} (for C++98 with GNU extensions), or +@option{-std=gnu++11} (for C++11 with GNU extensions), or +@option{-std=gnu++14} (for C++14 with GNU extensions), or +@option{-std=gnu++1z} (for C++1z with GNU extensions). The default, if +no C++ language dialect options are given, is @option{-std=gnu++14}. @section Objective-C and Objective-C++ Languages @cindex Objective-C