From patchwork Wed Jan 13 13:28:32 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Wakely X-Patchwork-Id: 566933 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id EAB29140C03 for ; Thu, 14 Jan 2016 00:28:45 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=aY2cDlRA; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:cc:subject:message-id:mime-version:content-type; q=dns; s=default; b=HojUqK2a1MhvBmaXLVktjrZy20P7jXK3T+qr/LMiVDsqc3YWIt d1IavEOiwVgNVJRxY08g2FnDCcYK5WTwoKgxgpdLoqkXxSJBIs+Rau6Gd/gHzVV7 UvYg3ciDHLqR/KXnWFVGGmXue3Ha1vpWs0OAtb7qS66obXsEQD+pdGg6E= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:date :from:to:cc:subject:message-id:mime-version:content-type; s= default; bh=SJzALP3pTgO4FabvkmUDVRYsLh8=; b=aY2cDlRAO2bpu9DP2zK6 zBzBvS+OggMoAOfLhnOa2gu77B5HduVMmjlhz3f2h1pJnRQF0raaTHEafN2pB+sG nW3aDOfijImr+iA9JdXIWZqGgnuD6hpHdR0UtPIbKrYjiNLgOcvUtvy/J1S2ohr0 vXOwn7+CWna+eYP4kfa8rpQ= Received: (qmail 91313 invoked by alias); 13 Jan 2016 13:28:37 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 91293 invoked by uid 89); 13 Jan 2016 13:28:36 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.0 required=5.0 tests=BAYES_20, RP_MATCHES_RCVD, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=Languages, Technical, 1718, @uref X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Wed, 13 Jan 2016 13:28:35 +0000 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id CFE7AC0BF2D1; Wed, 13 Jan 2016 13:28:33 +0000 (UTC) Received: from localhost (ovpn-116-32.ams2.redhat.com [10.36.116.32]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u0DDSW7g012576; Wed, 13 Jan 2016 08:28:33 -0500 Date: Wed, 13 Jan 2016 13:28:32 +0000 From: Jonathan Wakely To: gcc-patches@gcc.gnu.org Cc: Gerald Pfeifer , Joseph Myers , Sandra Loosemore , Jason Merrill Subject: Improve documentation of -std option for C++ Message-ID: <20160113132832.GI15084@redhat.com> MIME-Version: 1.0 Content-Disposition: inline X-Clacks-Overhead: GNU Terry Pratchett User-Agent: Mutt/1.5.24 (2015-08-30) This patch corrects the manual w.r.t the default -std mode for C++, which changed from -std=gnu++98 to -std=gnu++14 in GCC 6. (I was slightly surprised to find that -ansi didn't change to mean -std=c++14 at the same time, but now I think that makes sense.) I added a cross-reference from the C++ options section to the C options section, so people looking for documentation of -std for C++ know where to look. I also documented C++14 and the Concepts TS in standards.texi and removed the description of C++11 as experimental (I left C++14 described as experimental, as that's still what it says at https://gcc.gnu.org/projects/cxx1y.html). Rather then repeating the "to obtain all the diagnostics required by the standard" text about -pedantic/-pedantic-errors I left it only on the first paragraph and then added a new paragraph about it later. I also clarified that the extensions enabled by -std=gnu++XX are different to the ones enabled without -pedantic, taking the wording from the previous @section about C Standards. OK for trunk? commit a9e3d7d32a2cf7a0d651759d94fef2cb7e5cbd59 Author: Jonathan Wakely Date: Wed Jan 13 11:38:52 2016 +0000 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. diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index d77346d..93d501b 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -1780,8 +1780,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 @@ -1801,6 +1800,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 @@ -2128,6 +2128,9 @@ 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@. +@xref{C Dialect Options,,Options Controlling C Dialect} for the description +of @option{-std} and other options which are also relevant for C++ programs. + Here is a list of options that are @emph{only} for compiling C++ programs: @table @gcctabopt @@ -2313,7 +2316,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 55d57d4..c5f0573 100644 --- a/gcc/doc/standards.texi +++ b/gcc/doc/standards.texi @@ -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 @@ -188,25 +188,48 @@ 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). +changes to the C++ language, all of which have been implemented in GCC@. +For information regarding the C++11 features available in C++11 mode, +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 information +regarding the C++14 features available in the experimental C++14 mode, +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 will disable 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