I tried to write a nullptr_t
class based on the official proposal to be used in C++03 only. The only differences with the proposal are that we can compare two nullptr_t
instances and that it is convertible to bool
via an overload to void*
to avoid unwanted behaviour such as int a = nullptr;
for example. Here is the class:
const class nullptr_t
{
public:
// Return 0 for any class pointer
template<typename T>
operator T*() const
{
return 0;
}
// Return 0 for any member pointer
template<typename T, typename U>
operator T U::*() const
{
return 0;
}
// Used for bool conversion
operator void*() const
{
return 0;
}
// Comparisons with nullptr
bool operator==(const nullptr_t&) const
{
return true;
}
bool operator!=(const nullptr_t&) const
{
return false;
}
private:
// Not allowed to get the address
void operator&() const;
} nullptr = {};
I would like to know if there is any actual flaw in this completed implementation or if there is a difference in the behaviour compared to the C++11 type std::nullptr_t
besides the namespace that I can't see.