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