Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / wtf / NullPtr.h
index 520963b..1aa5584 100644 (file)
@@ -31,12 +31,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 // 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 {
@@ -46,10 +42,27 @@ typedef decltype(nullptr) nullptr_t;
 
 #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