RE: [ROOT] iostream problems

From: Philippe Canal (pcanal@fnal.gov)
Date: Thu Feb 28 2002 - 19:02:31 MET


Hi Nicole,

On Solaris, the ROOT configuration assumes that if the compiler is recent
(I think 5 or more), it assumes that the iostream library is standard 
compliant.  If I understand correct the -library=iostream make the
compiler use the older version of iostream ....  So maybe just telling
the ROOT code that the iostream library is NOT recent might work.

In RConfig.h, could you test you code by commenting out line 107:
#   if __SUNPRO_CC > 0x420
#      define R__SOLARIS_CC50
// #      define R__ANSISTREAM      /* ANSI C++ Standard Library conformant */
#   endif

and let us know.

Thanks,
Philippe.

-----Original Message-----
From: owner-roottalk@pcroot.cern.ch
[mailto:owner-roottalk@pcroot.cern.ch]On Behalf Of Nicole Chevalier
Sent: Thursday, February 28, 2002 10:29 AM
To: roottalk@pcroot.cern.ch
Subject: [ROOT] iostream problems




Hi,

The BaBar code uses root files for storing data. Currently it uses root
2.23-12 but we're trying to upgrade this to >3 to make use of the new
features.

The problems come with using the platform SunOS58 and WS6.  Here we need
the CC flag -library=iostream to make the BaBar code compile, otherwise we
get loads of errors like:
  Error: The name ostream is ambiguous, ostream and std::ostream
The errors are because the iostream names that used to be simple classes
have been changed to something complicated that creates std::ostream
and then does "using std::ostream" to put it into the global namespace,
simulating the behaviour of the old class. If we have forward declaration
"class ostream" there are two things called ostream and the compiler
gives up.
This flag forces the use of libiostream, the classic iostreams library.
This works fine with old Root 2, however when I try to compile with Root 3
I get similar ambiguous iostream errors in the packages that rely on root.

I thought this might be because Root was using the new iostream libs,
so I figured if I built root with the classic iostream libs it might be
compatible with the BaBar code.
I tried building Root 3.01-06 from the source with ARCH := solarisCC5 (but
using WS6U1) and the CC flag -library=iostream added to CXXFLAGS, CFLAGS,
CINTCXXFLAGS and CINTCFLAGS in config/Makefile.solarisCC5.
However on compilation I got similar ambiguous iostream errors:
 include/TString.h", line 319: Error: The name istream is ambiguous,
 istream and std::istream

There were also earlier warning messages:
 utils/src/rootcint.cxx", line 1727: Warning: String literal converted to
 char* in assignment.

Is it possible to build root with the old iostream headers?
If so, what am I missing?

Any help in understanding the source of the problem or any possible
solutions would be very welcome.
Thanks in advance.

nicole



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:43 MET