http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44499
--- Comment #11 from Jonathan Wakely <redi at gcc dot gnu.org> 2011-03-03
23:14:10 UTC ---
(In reply to comment #10)
> (In reply to comment #3)
> > (In reply to comment #1)
> > > gcc is correct, accepting the code previously was a bug that was fixed
> > > recently
> > >
> > > You need to provide an initializer for g_d
> >
> > This sort of changes should be documented in the changes.html page or in
> > porting_to.html
I prepared this:
<li>As required by the C++ standard, G++ no longer allows objects of
const-qualified type to be default initialized unless the type has a
user-declared default constructor. Code that fails to compile can be
fixed by providing an initializer e.g.
<pre>
struct S { };
const S s = S();
</pre>
Use <code>-fpermissive</code> to allow the old, non-conforming behaviour.
</li>
However ...
> Could this be added? Some upstreams are arguing this is a bug in GCC. In the
> past we've found that if it's documented that this change was indeed
> intentional, they're more willing to fix their code.
GCC 4.4 and 4.5 reject the example too, so I don't know when the bug was fixed,
it's apparently not a change in 4.6 (though there were some bugs in this area
fixed recently.)
Upstream will have to accept that G++ (like Clang++ and EDG) conforms to the
standard in this respect.