__null
is a g++
internal thing that serves roughly the same purpose as the standard nullptr
added in C++11 (acting consistently as a pointer, never an integer).
NULL
is defined as 0
, which can be implicitly used as integer, boolean, floating point value or pointer, which is a problem when it comes to overload resolution, when you want to call the function that takes a pointer specifically.
In any event, you shouldn’t use __null
because it’s a g++
implementation detail, so using it guarantees non-portable code. If you can rely on C++11 (surely you can by now?), use nullptr
. If not, NULL
is your only portable option.