Andrew Pinski <[EMAIL PROTECTED]> writes: | On May 6, 2005, at 8:09 PM, Julian Cummings wrote: | | > People are reporting trouble compiling blitz with gcc-4.0.0, and the | > compiler errors are resulting from the use of unnamed enums. A | > simple code | > illustrates the problem: | > | > struct nullType {}; | > template <typename T> inline T operator+(const T& a, nullType) { | > return a; | > } | > enum named { namedA = 1, namedB = 2 }; | > enum { unnamedA = 2, unnamedB = 4 }; | > struct bar { | > enum { namedC = namedA + namedB, | > unnamedC = unnamedA + unnamedB }; | > }; | > int main() { | > } | > | > The gcc compiler complains about trying to add unnamedA and unnamedB. | > Apparently it gets confused by the presence of the operator+ | > overload for | > the empty struct nullType. I don't see why the compiler would think | > that | > the anonymous enumerators unnamedA or unnamedB would match with type | > nullType. Enumerators are supposed to default to integers when used in | > arithmetic operations such as operator+. Everything compiles fine | > when the | > operator+ overload is not present. The code compiles as is under | > gcc-3.4. | > What gives? | | This is a bug in your code. See PR 19404 and PR 20589.
Or this is a bug in the standard. There is an active core issue for it. And I sent a request for further clarification and rationale. (I've heard some rumours about manglings, but they don't make sense to me). -- Gaby