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.