[ROOT] rootcint vs. ios

From: Mark Messier (messier@huhepl.harvard.edu)
Date: Fri Nov 02 2001 - 21:57:19 MET


Hi,

I've been running into a few problems with rootcint and its handling of
pre-processer flags, iostreams, and/or include file paths. I'm running
RH7.1 and gcc3.0. My root installation was updated today from cvs.

First, the cpp macros. The following will compile on my system fine when
using gcc3.0, but will fail when this file is included in other which
is parsed by rootcint:

#ifdef _CPP_BITS_IOSBASE_H // Does the compiler define an ios_base class??

[ some code omitted ]

#else // _CPP_BITS_IOSBASE_H

typedef SHOULD_NOT_SEE_ME should_not_see_me;

#endif // _CPP_BITS_IOSBASE_H

gcc works fine on this. But rootcint complains with:

Error: class,struct,union or type SHOULD_NOT_SEE_ME not defined

The typedef is just some illegal code to demonstrate that the compiler is
looking at the first block while rootcint is looking at the second. What
could cause this? Its seems to me it could lead to some very strange
behavior.

Perhaps related to the above, the following code compiles fine:

typedef ios& (*__manip_func)(ios&);
MsgStream& operator<<(__manip_func func) { [code...] }

but when this is included into a file parsed by rootcint I get:

Error: class,struct,union or type ios not defined

ios is defined in the file (on my system):

/usr/local/include/g++-v3/bits/std_iosfwd.h

as

typedef basic_ios<char>               ios;

So the two problems are somehow related, I think. rootcint isn't finding
the ios_base.h header and so can't form the ios type. Just my guess.  How
does rootcint decide where to get headers from? How is this kept in sync.
with the search path defined by the compiler? Anyone have an idea as to
what's going on here??

Thanks,
Mark
========================================================================
Mark Messier                          e-mail: messier@huhepl.harvard.edu
Harvard University                  http://www.hepl.harvard.edu/~messier
42 Oxford Street                                     Tel. (617) 496-2361
Cambridge, MA 02138                                  Fax. (617) 495-2678



This archive was generated by hypermail 2b29 : Tue Jan 01 2002 - 17:51:06 MET