// nullptr_t type and nullptr object. They are defined in the same namespaces they
// would be in compiler and library that had the support.
-#include <ciso646>
-
#if COMPILER_SUPPORTS(CXX_NULLPTR) || defined(_LIBCPP_VERSION)
-#include <cstddef>
-
// libstdc++ supports nullptr_t starting with gcc 4.6. STLport doesn't define it.
#if (defined(__GLIBCXX__) && __GLIBCXX__ < 20110325) || defined(_STLPORT_VERSION)
namespace std {
#else
+#include "wtf/WTFExport.h"
+
namespace std {
-class nullptr_t { };
+class nullptr_t {
+public:
+ // Required in order to create const nullptr_t objects without an
+ // explicit initializer in GCC 4.5, a la:
+ //
+ // const std::nullptr_t nullptr;
+ nullptr_t() { }
+
+ // Make nullptr convertible to any pointer type.
+ template<typename T> operator T*() const { return 0; }
+ // Make nullptr convertible to any member pointer type.
+ template<typename C, typename T> operator T C::*() { return 0; }
+private:
+ // Do not allow taking the address of nullptr.
+ void operator&();
+};
}
-extern std::nullptr_t nullptr;
+WTF_EXPORT extern const std::nullptr_t nullptr;
#endif