http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51440
Bug #: 51440 Summary: C++ compiler produces warning for an unnamed struct member: TYPE has a field FIELD whose type uses the anonymous namespace Classification: Unclassified Product: gcc Version: 4.6.1 Status: UNCONFIRMED Severity: minor Priority: P3 Component: c++ AssignedTo: unassig...@gcc.gnu.org ReportedBy: blue.dragan+...@gmail.com Repro steps: File test.h: ======================================== typedef volatile struct { } Unnamed; typedef struct __Named { Unnamed u; } Named; ======================================== File test.cpp: ======================================== #include "test.h" ======================================== Outcome: ======================================== $ g++ -c -o test.o test.cpp In file included from test.cpp:1:0: test.h:4:16: warning: '__Named' has a field '__Named::u' whose type uses the anonymous namespace [enabled by default] ======================================== Details about the repro scenario: 1) Only C++ compiler (C compiler does not generate the warning). 2) Only if the structures are in header files. When the contents of test.h are moved to test.cpp, the warning disappears. 3) Only if the unnamed structure is volatile. When volatile keyword is removed, the warning disappears. 4) GCC 4.6.1 hits this problem, but GCC 4.2.4 and 4.4.3 don't have this problem. Haven't tested any other version of GCC. 5) I'm using GCC for armv7a-unknown-linux-gnueabi target, haven't tried it with any other target, although the problem "seems" target-independent. 6) The warning is especially annoying, because there appears to be no way to disable it. I don't see anything wrong with defining the structures like this. This is a common way for defining hardware registers which helps to prevent users from mistakenly dropping the volatile keyword.