[ROOT] std namespace

From: Christoph Borgmeier (borg@ifh.de)
Date: Thu Aug 29 2002 - 13:56:29 MEST


Hi all,

I just ran into some trouble concerning the Root std namespace handling.
The following program does not compile

--------------------------------------------------------
#include <algorithm>
#include <TObject.h>

int max;

int main()
{
  max = 1;
}
--------------------------------------------------------

because of this error:

--------------------------------------------------------
usingroot.C: In function `int main()':
usingroot.C:8: use of `max' is ambiguous
usingroot.C:4:   first declared as `int max' here
/usr/include/c++/3.2/bits/stl_algobase.h:207:   also declared as
`const _Tp& std::max(const _Tp&, const _Tp&, _Compare)' here
--------------------------------------------------------

Apparently any inclusion of a Root header file results in a using
namespace std (in Riosfwd.h). This violates common C++ rules and is not
necessary.

The best fix would be to add std:: to the occurrences of istream, ostream,
ifstream, ofstream in the Root header files.

If there is still a supported compiler which does not tolerate that, could
at least the `using namespace std;' in Riosfwd.h be changed into 'using
std::istream;using std::ostream;...'? (Only half as bad.)

Best regards
Christoph



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