root / lab4 / .minix-src / include / c++ / cstddef @ 14
History | View | Annotate | Download (2.51 KB)
1 |
// -*- C++ -*- |
---|---|
2 |
//===--------------------------- cstddef ----------------------------------===// |
3 |
// |
4 |
// The LLVM Compiler Infrastructure |
5 |
// |
6 |
// This file is dual licensed under the MIT and the University of Illinois Open |
7 |
// Source Licenses. See LICENSE.TXT for details. |
8 |
// |
9 |
//===----------------------------------------------------------------------===// |
10 |
|
11 |
#ifndef _LIBCPP_CSTDDEF |
12 |
#define _LIBCPP_CSTDDEF |
13 |
|
14 |
/* |
15 |
cstddef synopsis |
16 |
|
17 |
Macros: |
18 |
|
19 |
offsetof(type,member-designator) |
20 |
NULL |
21 |
|
22 |
namespace std |
23 |
{ |
24 |
|
25 |
Types: |
26 |
|
27 |
ptrdiff_t |
28 |
size_t |
29 |
max_align_t |
30 |
nullptr_t |
31 |
|
32 |
} // std |
33 |
|
34 |
*/ |
35 |
|
36 |
#include <__config> |
37 |
|
38 |
#include <stddef.h> |
39 |
|
40 |
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) |
41 |
#pragma GCC system_header |
42 |
#endif |
43 |
|
44 |
_LIBCPP_BEGIN_NAMESPACE_STD |
45 |
|
46 |
using ::ptrdiff_t; |
47 |
using ::size_t; |
48 |
|
49 |
#if defined(__CLANG_MAX_ALIGN_T_DEFINED) || defined(_GCC_MAX_ALIGN_T) |
50 |
// Re-use the compiler's <stddef.h> max_align_t where possible. |
51 |
using ::max_align_t; |
52 |
#else |
53 |
typedef long double max_align_t; |
54 |
#endif |
55 |
|
56 |
#ifdef _LIBCPP_HAS_NO_NULLPTR |
57 |
|
58 |
struct _LIBCPP_TYPE_VIS_ONLY nullptr_t |
59 |
{ |
60 |
void* __lx; |
61 |
|
62 |
struct __nat {int __for_bool_;}; |
63 |
|
64 |
_LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR nullptr_t() : __lx(0) {} |
65 |
_LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR nullptr_t(int __nat::*) : __lx(0) {} |
66 |
|
67 |
_LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR operator int __nat::*() const {return 0;} |
68 |
|
69 |
template <class _Tp> |
70 |
_LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR |
71 |
operator _Tp* () const {return 0;} |
72 |
|
73 |
template <class _Tp, class _Up> |
74 |
_LIBCPP_ALWAYS_INLINE |
75 |
operator _Tp _Up::* () const {return 0;} |
76 |
|
77 |
friend _LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR bool operator==(nullptr_t, nullptr_t) {return true;} |
78 |
friend _LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR bool operator!=(nullptr_t, nullptr_t) {return false;} |
79 |
friend _LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR bool operator<(nullptr_t, nullptr_t) {return false;} |
80 |
friend _LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR bool operator<=(nullptr_t, nullptr_t) {return true;} |
81 |
friend _LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR bool operator>(nullptr_t, nullptr_t) {return false;} |
82 |
friend _LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR bool operator>=(nullptr_t, nullptr_t) {return true;} |
83 |
}; |
84 |
|
85 |
inline _LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR nullptr_t __get_nullptr_t() {return nullptr_t(0);} |
86 |
|
87 |
#define nullptr _VSTD::__get_nullptr_t() |
88 |
|
89 |
#endif // _LIBCPP_HAS_NO_NULLPTR |
90 |
|
91 |
_LIBCPP_END_NAMESPACE_STD |
92 |
|
93 |
#ifndef _LIBCPP_HAS_NO_NULLPTR |
94 |
|
95 |
namespace std |
96 |
{ |
97 |
typedef decltype(nullptr) nullptr_t; |
98 |
} |
99 |
|
100 |
#endif // _LIBCPP_HAS_NO_NULLPTR |
101 |
|
102 |
#endif // _LIBCPP_CSTDDEF |