[ROOT] Should Bool_t still be typedef'ed to unsigned char

From: Walter F.J. Mueller (w.f.j.mueller@gsi.de)
Date: Mon Nov 26 2001 - 21:45:28 MET


Hello,

Bool_t is typedef'ed to `unsigned char' in Rtypes.h. As an unfortunate
consequence this boolean looking types behaves different than the native
bool type in at least two ways:

1. stream output:

	root [0] Bool_t b1 = kTRUE;
	root [1] cout << b1 << endl;
     
    will write a binary 1 into cout, while

	root [2] bool b2 = true;
	root [3] cout << b2 << endl;

    gives the expected `1'.

2. Implicit conversions:

	root [0] Bool_t b1 = 0x0100;
	root [1] b1
	(unsigned char)0

    This is a real trap and caused in my case some obscure bugs when I
    ported some code into the ROOT environment. The C++ type bool simply
    has different semantics than stand-in Bool_t.

The introduction of Bool_t  was probably motivated by the fact that some
compilers didn't support `bool' when ROOT was initially designed. By now,
all contempory compilers should support `bool', so there is no need for this
in my view potentially confusion typedef for `unsigned char'.

As a consequence I wonder whether one shouldn't typedef Bool_t to bool
in one of the next major releases.


			With best regards,

				Walter Mueller

--
Walter F.J. Mueller   Mail:  W.F.J.Mueller@gsi.de
GSI,  Abteilung KP3   Phone: +49-6159-71-2766
D-64291 Darmstadt     FAX:   +49-6159-71-2989
WWW:   http://www-kp3.gsi.de/www/kp3/people/mueller.html
PGP:   http://www-kp3.gsi.de/~mueller/pgp.shtml



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