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?

Thanks, Julian C.

Dr. Julian C. Cummings    Office: PB-111
Caltech/CACR, MC 158-79   Phone:  626-395-2543
1200 E. California Blvd.  Fax:    626-584-5917
Pasadena, CA 91125 


Reply via email to