RE:Re: rootcint problems with 2.00.09 on

From: Masaharu Goto (MXJ02154@niftyserve.or.jp)
Date: Thu Jul 02 1998 - 12:36:00 MEST


Stefan,

>And I forgot to say, that AllJets::Algorithm is a public enumeration of
>class AllJets. The compiler only complains when the argument is expected
>to be of type "AllJets::Algorithm", because in the  " ... ? ... : ... "
>construct the 2nd possibility "G__Mint(libp->para[1])" appearently has the
>wrong type, i.e. int, and in general the conversion int->enumeration is
>not allowed. 

Thanks for pointing this out. This was a bug. I fixed it in cint5.13.63 
which will be copied to CERN shortly.

One lmitation remains, Please be careful about following situation when you
use reference to enum type. If you have a function receiving reference to
enum, you can't give raw enum value to it. You must always allocate a enum 
type variable, then give it to the function. C++ compiler rejects such error, 
unfortunately cint doesn't.  Please avoid such error. 

class A {
 public:
  enum B { x,y,z };
  void f(B& a)  { a = z; }
};

void g() {
  A a;
  A::B b=x;
  a.f(b);     // OK ,  z is assigned to b
  a.f(A::x);  // BAD,  tries to assign z on A::x
              //   C++ compiler rejects this,
              //   cint unfortunately accepts this and changes value of A::x
}             //   This means A::x changes to 2 after this point. 

Masaharu Goto



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:34:34 MET