If you think a C++ compiler has the option to define NULL as ((void * ) 0) then all I ask is that you simply try it yourself and let me know what compiler error you get. Make sure to turn off permissive flags.
class Foo { };
int main() {
Foo *foo = malloc(sizeof(Foo)); // returns void*
}