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 16struct A 17{ 18 A(std::nullptr_t) {} 19}; 20 21int 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