Jean-Francois Panisset wrote:
>
> Hi everyone,
>
> I recently installed g++ 2.95.2 on a linux system, and I am now
> getting some compilation failures when compiling code which references
> glu.h as per the latest CVS images.
>
> More specifically, consider the following C++ code:
>
> #include <GL/glu.h>
>
> void foo(GLUquadricObj *qobj)
> {
> gluQuadricDrawStyle(qobj, GLU_FILL);
> }
>
> With g++ 2.91.66 (which is the one which comes with RedHat 6.1, I think),
> you get:
>
> $ g++ -c foo.C
> foo.C: In function `void foo(struct GLUquadricObj *)':
> foo.C:5: warning: conversion from `enum {anonymous}' to `enum GLenum'
> $ g++ --version
> egcs-2.91.66
>
> But with 2.95.2, you now get an error:
>
> $ g++ -c foo.C
> foo.C: In function `void foo(GLUquadricObj *)':
> foo.C:5: conversion from `enum {anonymous}' to `enum GLenum'
> $ g++ --version
> 2.95.2
>
> The problem is that gluQuadricDrawStyle and frieds is defined as:
>
> GLUAPI void GLAPIENTRY gluQuadricDrawStyle( GLUquadricObj *quadObject,
> GLenum drawStyle );
>
> whereas GLU_FILL is defined as an anonymous enum:
>
> enum {
> ...
> GLU_FILL = 100012,
> ...
> };
>
> and g++ is refusing to cast an anonymous enum it a GLenum. I'm not
> enough of a C++ language lawyer to tell if g++ is wrong or not,
> but I suspect that since a lot of people using Mesa will also
> want to run the "latest and greatest" g++, this could be a problem.
>
> Note that moving the same pre-processed source to IRIX gets the
> same error on the MIPSpro C++ compiler:
>
> $ CC -c foo.C
> "foo.C", line 20: error(1164): argument of type "enum <unnamed>" is
> incompatible with parameter of type "GLenum"
> gluQuadricDrawStyle(qobj, GLU_FILL);
> ^
>
> 1 error detected in the compilation of "foo.C".
>
> Note that in IRIX, gl.h defines:
>
> typedef unsigned int GLenum;
>
> and glu.h defines:
>
> #define GLU_FILL 100012
>
> which is why you don't normally get these kinds of problem on that
> platform.
>
> I imagine that there is a good reason for using enums instead of
> #defines in the the Mesa gl.h and glu.h?
It's nicer for debugging :)
However, I'm likely to convert to #defines for the next version
of Mesa. I was recently stung by an incompatibility between
real enums and #defines when using C++.
What happens if you replace the enums in glu.h with #defines?
I haven't done the conversion myself yet.
-Brian
_______________________________________________
Mesa-dev maillist - [EMAIL PROTECTED]
http://lists.mesa3d.org/mailman/listinfo/mesa-dev