//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is dual licensed under the MIT and the University of Illinois Open // Source Licenses. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #include #include #include // typedef decltype(nullptr) nullptr_t; struct A { A(std::nullptr_t) {} }; template void test_conversions() { { T p = 0; assert(p == nullptr); } { T p = nullptr; assert(p == nullptr); assert(nullptr == p); assert(!(p != nullptr)); assert(!(nullptr != p)); } } template void test_comparisons() { T p = nullptr; assert(p == nullptr); assert(p <= nullptr); assert(p >= nullptr); assert(!(p != nullptr)); assert(!(p < nullptr)); assert(!(p > nullptr)); assert(nullptr == p); assert(nullptr <= p); assert(nullptr >= p); assert(!(nullptr != p)); assert(!(nullptr < p)); assert(!(nullptr > p)); } int main() { static_assert(sizeof(std::nullptr_t) == sizeof(void*), "sizeof(std::nullptr_t) == sizeof(void*)"); { test_conversions(); test_conversions(); test_conversions(); test_conversions(); test_conversions(); test_conversions(); } { test_comparisons(); test_comparisons(); test_comparisons(); test_comparisons(); } { bool b = nullptr; assert(!b); } }