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
File Mode Size
cont
eve
fft
fit
foam
geom
gl
graphics
graphs
gui
hist
image
io
math
matrix
mlp
net
physics
proof
pyroot
pythia
quadp
ruby
spectrum
splot
sql
thread
tree
unuran
xml
MyTasks.cxx -rw-r--r-- 6.1 KB
README -rw-r--r-- 1.9 KB
benchmarks.C -rw-r--r-- 2.1 KB
demos.C -rw-r--r-- 2.7 KB
demoshelp.C -rw-r--r-- 1.3 KB
gallery.root -rw-r--r-- 387.6 KB
geant3tasks.C -rw-r--r-- 5.9 KB
hsimple.C -rw-r--r-- 3.6 KB
htmlex.C -rw-r--r-- 3.1 KB
regexp.C -rw-r--r-- 5.4 KB
regexp_pme.C -rw-r--r-- 3.3 KB
rootalias.C -rw-r--r-- 1.8 KB
rootenv.C -rw-r--r-- 3.5 KB
rootlogoff.C -rw-r--r-- 59 bytes
rootlogon.C -rw-r--r-- 377 bytes
rootmarks.C -rw-r--r-- 4.9 KB
tasks.C -rw-r--r-- 1.7 KB

README

back to top