1 //===----------------------------------------------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is dual licensed under the MIT and the University of Illinois Open 6 // Source Licenses. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include <cstddef> 11 #include <type_traits> 12 #include <cassert> 13 14 // typedef decltype(nullptr) nullptr_t; 15 16 struct A 17 { 18 A(std::nullptr_t) {} 19 }; 20 21 int main() 22 { 23 static_assert(sizeof(std::nullptr_t) == sizeof(void*), 24 "sizeof(std::nullptr_t) == sizeof(void*)"); 25 A* p = 0; 26 assert(p == nullptr); 27 void (A::*pmf)() = 0; 28 #ifdef __clang__ 29 // GCC 4.2 can't handle this 30 assert(pmf == nullptr); 31 #endif 32 int A::*pmd = 0; 33 assert(pmd == nullptr); 34 A a1(nullptr); 35 A a2(0); 36 bool b = nullptr; 37 assert(!b); 38 assert(nullptr == nullptr); 39 assert(nullptr <= nullptr); 40 assert(nullptr >= nullptr); 41 assert(!(nullptr != nullptr)); 42 assert(!(nullptr < nullptr)); 43 assert(!(nullptr > nullptr)); 44 A* a = nullptr; 45 assert(a == nullptr); 46 assert(a <= nullptr); 47 assert(a >= nullptr); 48 assert(!(a != nullptr)); 49 assert(!(a < nullptr)); 50 assert(!(a > nullptr)); 51 assert(nullptr == a); 52 assert(nullptr <= a); 53 assert(nullptr >= a); 54 assert(!(nullptr != a)); 55 assert(!(nullptr < a)); 56 assert(!(nullptr > a)); 57 std::ptrdiff_t i = reinterpret_cast<std::ptrdiff_t>(nullptr); 58 assert(i == 0); 59 } 60