In experimenting with adding classes to ROOT, I think I stumbled on an
inconvenience in the way rootcint works.  I wanted to see how ROOT
would work with user-defined abstract base classes, so I put together
a seemingly trivial example using two classes, `base' and `derived'.
The native SGI CC found errors in the dictionary file for these
classes created by running `rootcint'.  When I looked at the source, I
found the following:
   /* Setting up class inheritance */
static long G__2vbo_derived_base_0(long pobject) {
  derived *derived=(derived*)pobject;
  base *base=derived;
  return((long)base-(long)derived);
}
Here's a dissection of that first variable declaration:
  derived *derived=(derived*)pobject;
     ^        ^
     |        |
     |     name of local variable automatically generated by rootcint
     |
 name taken from the name of my class, `derived'
The fact that the local variable (coincidentally) has the same name as
my class, causes errors in compilation.  If I change the name of my
class to `derived1', the same lines in the output of `rootcint' look
like:
   /* Setting up class inheritance */
static long G__2vbo_derived1_base1_0(long pobject) {
  derived1 *derived=(derived1*)pobject;
  base1 *base=derived;
  return((long)base-(long)derived);
}
And everything works just fine.  We can certainly debate whether user
classes named `derived' and `base' are a good idea or not, but since
these functions above are automatically generated by `rootcint', and
are not generally intended for human consumption, I'd suggest it pick
names less likely to collide with user code - lots of underscores and
the like.  Just my 2 [cents,francs,yen].
Cheers,
Dave
-- David P. Morrison, Postdoctoral Research Associate University of Tennessee, 401 Nielsen Hall, Knoxville, TN 37996-1200 Oak Ridge National Laboratory, MS 6374, Oak Ridge, TN 37831-6374 Phone: (423) 576-8765, Fax: (423) 576-5780, Finger for public key