Revision 6542fdbd8d000fc5b18eb3f396b5d18f1ffd6521 authored by Paul Russo on 13 June 2008, 20:34:11 UTC, committed by Paul Russo on 13 June 2008, 20:34:11 UTC
"int" so that NULL translates to a constant integral type.

The C++ standard has this to say in section
4.10 Pointer conversions [conv.ptr]:

     A "null pointer constant" is an integral constant
     expression (5.19) rvalue of integer type that
     evaluates to zero.

This is a problem in a function overloading situation
like this:

void f(double);
void f(char*);

int main()
{
   for (int i = 1; i < 10; ++i) {
      f(i);
   }
}

The rule in section 4.10 on null pointer constants
and the rules in Chapter 13 Overloading, make f(char*)
a non-viable function for overloading purposes
because i is not a "integral constant expression".

However given:

     #define POGO 0

then in the same loop a call written:

     f(POGO);

is ambiguous since both of the functions are viable
(because POGO is substituted with 0, which is an
integral constant expression).

In cint "#define int MyType" is implemented as a variable
definition using the special type macroInt$.  So we need
to make that type const so that overloading works correctly.

Note that this is all a gross hack to paper over the fact
that cint does not have a proper preprocessor.

-- Paul Russo and Philippe Canal


git-svn-id: http://root.cern.ch/svn/root/trunk@24273 27541ba8-7e3a-0410-8455-c3a389f83636
1 parent 81bd3c4
History

back to top