RE:Error: Can't call ostream::width() in

Masaharu Goto (MXJ02154@nifty.ne.jp)
Sun, 24 Jan 1999 15:58:35 +0900


Pasha,

I think I should add this QA to FAQ.

There are several versions of iostream library support in CINT.

1) Old ANSI C++ 3.0 iostream version - precompiled
This is the most common version which is used currently. Following
platforms use this version.

Win32 Visual C++, Symantec C++, old Borland C++
Linux gcc
FreeBSD gcc
BSDOS gcc
HP-UX CC,aCC,gcc
Solaris SUNWspro-CC,gcc
AIX xlC,gcc
SGI CC,gcc
AlphaOSF cxx,gcc
etc...

2) New template base iostream version - precompiled
Template base iostream library is still on its' way of completeness.
Major compilers provides template base iostream library, however, their
implementation and ANSI/ISO comformance is not uniform. Currently, cint
only supports template base precompiled iostream library for following
platform

Win32 C++ Builder

Extending this support for other compiler is possible but not easy.
Because of inconsistent compiler implementation, I must do some cut&try
on particular platform.

3) Fake iostream version - interpreted
There are a few compilers which precompiled iostream library is not
supported.

Linux,HP-UX,SGI,etc... KAI-CC, egcs

Those compilers only have template base iostream library. As described
above, support for template base iostream library is still on the way.
For these environment, CINT provides fake iostream version which is
interpreted. The fake version only supports very basic io functionality.
No support for library details.

Platforms you have problem with fall into category 3). GSI/EGCS and SGI/KCC.
I'm sorry for inconvenience for the time being.

Mashaaru Goto

--------------------------------------------------------------------------
Dear ROOT developers,
I'm having a problem with rebuilding CINT (and therefore - ROOT)
in SGI/EGCS-1.1.1 configuration. THe build finishes successfully, however
the following doesn't work:

/data69/upgrade/root/v2_21_01/GCC_2_8>bin/root -b
*******************************************
* *
* W E L C O M E to R O O T *
* *
* Version 2.21/01 14 January 1999 *
* *
* You are welcome to visit our Web site *
* http://root.cern.ch *
* *
*******************************************

CINT/ROOT C/C++ Interpreter version 5.13.83, Dec 2 1998
Type ? for help. Commands must be C++ statements.
Enclose multiple statements between { }.
root [0] cout << setw(10) << 10.345 << endl;
Error: Can't call ostream::width() in current scope FILE:iomanip.h LINE:76
Error: L Illegal operator for real number FILE:/var/tmp/aaaa0078a LINE:1
(class G__CINT_ENDL)273087296
*** Interpreter error recovered ***
root [1] cout << setw(10) << 10 << endl;
Error: Can't call ostream::width() in current scope FILE:iomanip.h LINE:76
*** Interpreter error recovered ***

The same is happening when I'm trying to invoke bare CINT (the diagnostics is
the
same for both - EGCS-1.1.1 and KCC-3.3 - versions) :

/data69/upgrade/root/v2_21_03/GCC_2_8>bin/cint

cint : C/C++ interpreter
Copyright(c) : 1991~1996 [hp] Hewlett-Packard-Japan
Author : Masaharu Goto (gotom@jpn.hp.com)
Copyright(c) : 1995~1998 Masaharu Goto (MXJ02154@niftyserve.or.jp)
revision : 5.13.87, Jan 8 1999 by M.Goto

No main() function found in given source file. Interactive interface started.
'h' for help, 'q' to quit, '{ statements }' or 'p [expression]' to evaluate

cint> #include <iostream.h>
cint> #include <iomanip.h>
cint> cout << setw(10) << 10.345 << endl;
Error: Can't call ostream::width() in current scope FILE:iomanip.h LINE:76
Possible canditates are...
filename line:size busy function type and name
Error: L Illegal operator for real number FILE:/var/tmp/caaa000p8 LINE:1
(class G__CINT_ENDL)268571144

The same problem is taking place with SGI/KCC version *ftp-ed from root.cern.c
h*
Funny enough , the SGI/GCC(2.7.2) -compiled version *ftp-ed from root.cern.ch*

and
thus - I believe - built on the same platform (cdfsga.fnal.gov) - doesn't have

this problem.

I'd greatly appreciate any help,
thanks a lot, pasha