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