1*4d6fc14bSjoerg// -*- C++ -*- 2*4d6fc14bSjoerg//===--------------------------- __nullptr --------------------------------===// 3*4d6fc14bSjoerg// 4*4d6fc14bSjoerg// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5*4d6fc14bSjoerg// See https://llvm.org/LICENSE.txt for license information. 6*4d6fc14bSjoerg// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7*4d6fc14bSjoerg// 8*4d6fc14bSjoerg//===----------------------------------------------------------------------===// 9*4d6fc14bSjoerg 10*4d6fc14bSjoerg#ifndef _LIBCPP_NULLPTR 11*4d6fc14bSjoerg#define _LIBCPP_NULLPTR 12*4d6fc14bSjoerg 13*4d6fc14bSjoerg#include <__config> 14*4d6fc14bSjoerg 15*4d6fc14bSjoerg#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 16*4d6fc14bSjoerg#pragma GCC system_header 17*4d6fc14bSjoerg#endif 18*4d6fc14bSjoerg 19*4d6fc14bSjoerg#ifdef _LIBCPP_HAS_NO_NULLPTR 20*4d6fc14bSjoerg 21*4d6fc14bSjoerg_LIBCPP_BEGIN_NAMESPACE_STD 22*4d6fc14bSjoerg 23*4d6fc14bSjoergstruct _LIBCPP_TEMPLATE_VIS nullptr_t 24*4d6fc14bSjoerg{ 25*4d6fc14bSjoerg void* __lx; 26*4d6fc14bSjoerg 27*4d6fc14bSjoerg struct __nat {int __for_bool_;}; 28*4d6fc14bSjoerg 29*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR nullptr_t() : __lx(0) {} 30*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR nullptr_t(int __nat::*) : __lx(0) {} 31*4d6fc14bSjoerg 32*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR operator int __nat::*() const {return 0;} 33*4d6fc14bSjoerg 34*4d6fc14bSjoerg template <class _Tp> 35*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR 36*4d6fc14bSjoerg operator _Tp* () const {return 0;} 37*4d6fc14bSjoerg 38*4d6fc14bSjoerg template <class _Tp, class _Up> 39*4d6fc14bSjoerg _LIBCPP_INLINE_VISIBILITY 40*4d6fc14bSjoerg operator _Tp _Up::* () const {return 0;} 41*4d6fc14bSjoerg 42*4d6fc14bSjoerg friend _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR bool operator==(nullptr_t, nullptr_t) {return true;} 43*4d6fc14bSjoerg friend _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR bool operator!=(nullptr_t, nullptr_t) {return false;} 44*4d6fc14bSjoerg}; 45*4d6fc14bSjoerg 46*4d6fc14bSjoerginline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR nullptr_t __get_nullptr_t() {return nullptr_t(0);} 47*4d6fc14bSjoerg 48*4d6fc14bSjoerg#define nullptr _VSTD::__get_nullptr_t() 49*4d6fc14bSjoerg 50*4d6fc14bSjoerg_LIBCPP_END_NAMESPACE_STD 51*4d6fc14bSjoerg 52*4d6fc14bSjoerg#else // _LIBCPP_HAS_NO_NULLPTR 53*4d6fc14bSjoerg 54*4d6fc14bSjoergnamespace std 55*4d6fc14bSjoerg{ 56*4d6fc14bSjoerg typedef decltype(nullptr) nullptr_t; 57*4d6fc14bSjoerg} 58*4d6fc14bSjoerg 59*4d6fc14bSjoerg#endif // _LIBCPP_HAS_NO_NULLPTR 60*4d6fc14bSjoerg 61*4d6fc14bSjoerg#endif // _LIBCPP_NULLPTR 62