diff mbox

[wwwdocs] Add a note about in-class initialization of static data member

Message ID 20160211142000.GB3163@redhat.com
State New
Headers show

Commit Message

Marek Polacek Feb. 11, 2016, 2:20 p.m. UTC
Does this look ok?


	Marek

Comments

Jonathan Wakely Feb. 11, 2016, 3:26 p.m. UTC | #1
On 11/02/16 15:20 +0100, Marek Polacek wrote:
>Does this look ok?

Looks OK, although how about stressing that it was only allowed as an
extension previously, e.g. ...


>Index: porting_to.html
>===================================================================
>RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-6/porting_to.html,v
>retrieving revision 1.9
>diff -u -r1.9 porting_to.html
>--- porting_to.html	10 Feb 2016 17:21:54 -0000	1.9
>+++ porting_to.html	11 Feb 2016 14:18:59 -0000
>@@ -269,6 +269,25 @@
> to port the code to use C++11's <code>std::unique_ptr</code> instead.
> </p>
>
>+<h3>'constexpr' needed for in-class initialization of static data member</h3>
>+

In C++98 in-class initialization of static data members is only
allowed for integral types, but as an extension G++ also allowed it
for floating point types:

>+
>+<pre><code>
>+struct X {
>+  const static double i = 10;
>+};
>+</pre></code>

The C++11 standard supports that in-class initialization using
<code>constexpr</code> instead, so the GNU extension is no longer
supported for C++11 or later. Programs relying on the extension will
be rejected with an error. The fix is to
use <code>constexpr</code> instead of <code>const</code>.
diff mbox

Patch

Index: porting_to.html
===================================================================
RCS file: /cvs/gcc/wwwdocs/htdocs/gcc-6/porting_to.html,v
retrieving revision 1.9
diff -u -r1.9 porting_to.html
--- porting_to.html	10 Feb 2016 17:21:54 -0000	1.9
+++ porting_to.html	11 Feb 2016 14:18:59 -0000
@@ -269,6 +269,25 @@ 
 to port the code to use C++11's <code>std::unique_ptr</code> instead.
 </p>
 
+<h3>'constexpr' needed for in-class initialization of static data member</h3>
+
+<p>
+Since C++11, the <code>constexpr</code> keyword is needed when initializing
+a non-integral static data member in a class.  Thus the following program is
+accepted in C++03 (albeit with a <tt>-Wpedantic</tt> warning):
+</p>
+
+<pre><code>
+struct X {
+  const static double i = 10;
+};
+</pre></code>
+
+<p>
+While in C++11, the program above is rejected with an error.  The fix is to
+use <code>constexpr</code> instead of <code>const</code>.
+</p>
+
 <h2>-Wmisleading-indentation</h2>
 <p>
 A new warning <code>-Wmisleading-indentation</code> was added