cstddef revision 262801
1193323Sed// -*- C++ -*- 2193323Sed//===--------------------------- cstddef ----------------------------------===// 3193323Sed// 4193323Sed// The LLVM Compiler Infrastructure 5193323Sed// 6193323Sed// This file is dual licensed under the MIT and the University of Illinois Open 7193323Sed// Source Licenses. See LICENSE.TXT for details. 8193323Sed// 9193323Sed//===----------------------------------------------------------------------===// 10193323Sed 11193323Sed#ifndef _LIBCPP_CSTDDEF 12193323Sed#define _LIBCPP_CSTDDEF 13193323Sed 14193323Sed/* 15193323Sed cstddef synopsis 16193323Sed 17193323SedMacros: 18193323Sed 19210006Srdivacky offsetof(type,member-designator) 20218885Sdim NULL 21249423Sdim 22193323Sednamespace std 23193323Sed{ 24193323Sed 25193323SedTypes: 26193323Sed 27193323Sed ptrdiff_t 28193323Sed size_t 29193323Sed max_align_t 30193323Sed nullptr_t 31193323Sed 32193323Sed} // std 33193323Sed 34195340Sed*/ 35193323Sed 36193323Sed#include <__config> 37193323Sed 38193323Sed#ifdef __GLIBC__ 39193323Sed#define __need_NULL 40193323Sed#define __need_ptrdiff_t 41193323Sed#define __need_size_t 42193323Sed#endif // __GLIBC__ 43193323Sed 44193323Sed#include <stddef.h> 45193323Sed 46193323Sed#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 47195340Sed#pragma GCC system_header 48198090Srdivacky#endif 49193323Sed 50193323Sed_LIBCPP_BEGIN_NAMESPACE_STD 51212793Sdim 52193323Sedusing ::ptrdiff_t; 53193323Sedusing ::size_t; 54193323Sed 55193323Sedtypedef long double max_align_t; 56193323Sed 57193323Sed#ifdef _LIBCPP_HAS_NO_NULLPTR 58205407Srdivacky 59193323Sedstruct _LIBCPP_TYPE_VIS_ONLY nullptr_t 60193323Sed{ 61193323Sed void* __lx; 62193323Sed 63193323Sed struct __nat {int __for_bool_;}; 64193323Sed 65212793Sdim _LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR nullptr_t() : __lx(0) {} 66205407Srdivacky _LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR nullptr_t(int __nat::*) : __lx(0) {} 67205407Srdivacky 68206083Srdivacky _LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR operator int __nat::*() const {return 0;} 69193323Sed 70198090Srdivacky template <class _Tp> 71193323Sed _LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR 72212793Sdim operator _Tp* () const {return 0;} 73195340Sed 74193323Sed template <class _Tp, class _Up> 75193323Sed _LIBCPP_ALWAYS_INLINE 76193323Sed operator _Tp _Up::* () const {return 0;} 77193323Sed 78212793Sdim friend _LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR bool operator==(nullptr_t, nullptr_t) {return true;} 79212793Sdim friend _LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR bool operator!=(nullptr_t, nullptr_t) {return false;} 80193323Sed friend _LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR bool operator<(nullptr_t, nullptr_t) {return false;} 81193323Sed friend _LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR bool operator<=(nullptr_t, nullptr_t) {return true;} 82212793Sdim friend _LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR bool operator>(nullptr_t, nullptr_t) {return false;} 83193323Sed friend _LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR bool operator>=(nullptr_t, nullptr_t) {return true;} 84193323Sed}; 85193323Sed 86193323Sedinline _LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR nullptr_t __get_nullptr_t() {return nullptr_t(0);} 87193323Sed 88193323Sed#define nullptr _VSTD::__get_nullptr_t() 89193323Sed 90207618Srdivacky#endif // _LIBCPP_HAS_NO_NULLPTR 91193323Sed 92193323Sed_LIBCPP_END_NAMESPACE_STD 93193323Sed 94193323Sed#ifndef _LIBCPP_HAS_NO_NULLPTR 95193323Sed 96193323Sednamespace std 97193323Sed{ 98193323Sed typedef decltype(nullptr) nullptr_t; 99193323Sed} 100193323Sed 101207618Srdivacky#endif // _LIBCPP_HAS_NO_NULLPTR 102193323Sed 103193323Sed#endif // _LIBCPP_CSTDDEF 104193323Sed