gcc 4.0.1 regressions with friend injection

Gabriel Dos Reis gdr@integrable-solutions.net
Tue Jul 26 01:09:00 GMT 2005


Mike Stump <mrs@apple.com> writes:

| We are seeing tons of regressions (9 of 2377 for fink, over 100 or so
| out of 8000 was it for internal projects) in the build state of
| projects with code like:
| 
|     class bar {
|        friend class foo;
|        void baz(foo *x) {}
|     };
| 
| from 4.0.0 in 4.0.1.  This is really unfortunate.  What we really
| need is a warning (that can be easily turned off with a -Wno- switch)
| for the next 2 years, and then an error, if you must.  Doing this
| from x.0.0 to x.0.1 is, uhm, well, more costly than if it had been
| done in 4.0.0.  :-(
| 
| Thoughts?

This area has been a historical weakness of GCC, causing us to reject
valid-code or accept valid-code-with-wrong-semantics.  As you point
out above, it can can the overload set and such.  Because the point of
declaration is far away from the point of possible overload
resolution, it is not all clear when an "invalid declaration accepted
for past bug compayibility" should be or not be part of the overload
set.  You can warn, but it you turn it off, it is not obvious what the
semantics should be.  

(This reminds me of the "implicit typename" stuff)

-- Gaby



More information about the Gcc mailing list