Am Samstag, dem 09.05.2026 um 14:21 +0100 schrieb Jonathan Wakely via Gcc: > On Sat, 9 May 2026, 09:40 Christopher Bazley via Gcc, <[email protected]> > wrote: > > > > > > > This flaw in the design of C++ is also what necessitated the invention > > of nullptr, which would otherwise be unnecessary. Had the purpose of > > 'void *' not been misunderstood, nullptr could simply have been defined > > as a macro: ((void *)0). > > > No it couldn't. > > This thread is getting more and more of topic, but defining nullptr as just > a void* would not allow the useful property of overloading functions like > unique_ptr::operator= on whether the argument is an actual pointer (which > would replace the owned pointer, but is disallowed by plain assignment) or > is the special nullptr value (which is allowed). > > That is: > > uptr = (void*)0; // error > uptr = nullptr; // ok > > I think you have an overly simplistic idea of why nullptr was added to C++, > leading to an incorrect conclusion about it only being necessary because of > C++ pointer conversion rules. > > It exists for reasons related to template type deduction and overloading, > not because void* isn't convertible to other pointer types.
This was indeed the reason given in the original paper why (void*)0 was not used. The other use cases make sense though. Martin
