As far as I'm aware nullptr is an instance of some class, something like this:
const
class {
public:
template<class T> // convertible to any type
operator T*() const // of null non-member
{ return 0; } // pointer...
template<class C, class T> // or any type of null
operator T C::*() const // member pointer...
{ return 0; }
private:
void operator&() const; // whose address can't be taken
} nullptr = {};
I suppose that
true
false
are also some variables. So is the fact that thay are prvalue-s a dirty hack violating the language's type system?
If nullptr is just a keyword, then how can type be derived from it?
typedef decltype(nullptr) nullptr_t;