Unreliable bool definition for compilers without bool type
----------------------------------------------------------
Key: XERCESC-1382
URL: http://issues.apache.org/jira/browse/XERCESC-1382
Project: Xerces-C++
Type: Bug
Versions: 2.6.0
Environment: Solaris 2.8 SPARCompiler 4.2
Reporter: Maciek Samsel
For those compilers that do not recognize bool type yet the definition as it is
now (see below) will not cut:
#if defined(NO_NATIVE_BOOL)
#ifndef bool
typedef int bool;
#endif
#ifndef true
#define true 1
#endif
#ifndef false
#define false 0
#endif
#endif
That will cause compiler errors whenever you have declaration/definition of a
method with int and and another with bool. Compiler tries to build the same
signature and gets confused. It happend with:
XSerializeEngine.hpp:
XSerializeEngine& operator<<(int);
XSerializeEngine& operator<<(bool);
// NO GO! Compiler error if bool is typedef as alias to int
The better approach that will not confuse compiler without bool type is to base
bool on enumeration like that:
#if defined(NO_NATIVE_BOOL)
#ifndef bool
typedef enum {false=0, true=1} bool;
#endif
#endif
... as long as we do not set enum as not convertible to integer (which was
possible at least with IBM VisualAge for C++ compiler).
Please adjust the file... as it compiles with proposed definition quite well.
There are also other approaches to deal with bool type or "smart enumeration
types". See how it was done in Java without enum but strict type checking - it
would be preferable way to apply to undefined bool type as other vendor may
define bool differently for libraries and it will cause conflicts with current
or proposed here solution in Xerces.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]