This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Anonymous types and [basic.link] for nonlocal variables


Geoff checked in a patch a few days ago, http://gcc.gnu.org/ml/gcc-patches/2004-03/msg00346.html

Among other things, this patch enforces the rule that variables with linkage may not be defined in terms of names with no linkage. Previously we enforced that rule selectively: we made a special exception for anonymous types. That is, we used to allow things like
enum { foo } e;
or
struct { int x; int y; } pairs[] = { { 1,2 }, { 5,8 } };


I didn't notice this patch when it went by a few days ago. Now I'm wondering if it's a good idea. Allowing variables to be defined in terms of anonymous types was a deliberate decision (there was a comment in the code pointing it out), because forms like this are legal in C and common, albeit illegal, in C++. If we're going to reverse a deliberate decision, we should make sure to give it a little thought.

This is one of those annoying problems where in one sense this is clearly a correct change: it brings us into closer conformance with the language standard that we claim to implement. On the other hand, it breaks the QT build. I bet QT isn't alone. In principle we'd be within our rights to tell developers that they need to fix their code, but I'm not convinced they'd thank us for it.

Is this change something we want?

--Matt


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]