From d8f28ec8a2faabad3aabb9f7a26755971424ef05 Mon Sep 17 00:00:00 2001 From: theraven Date: Tue, 22 Nov 2011 17:30:41 +0000 Subject: Import libcxxrt / libc++ into a vendor branch. Approved by: dim (mentor) --- include/cstddef | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 include/cstddef (limited to 'include/cstddef') diff --git a/include/cstddef b/include/cstddef new file mode 100644 index 0000000..48317ba --- /dev/null +++ b/include/cstddef @@ -0,0 +1,102 @@ +// -*- C++ -*- +//===--------------------------- cstddef ----------------------------------===// +// +// 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. +// +//===----------------------------------------------------------------------===// + +#ifndef _LIBCPP_CSTDDEF +#define _LIBCPP_CSTDDEF + +/* + cstddef synopsis + +Macros: + + offsetof(type,member-designator) + NULL + +namespace std +{ + +Types: + + ptrdiff_t + size_t + max_align_t + nullptr_t + +} // std + +*/ + +#include <__config> + +#ifdef __GLIBC__ +#define __need_NULL +#define __need_ptrdiff_t +#define __need_size_t +#endif // __GLIBC__ + +#include + +#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) +#pragma GCC system_header +#endif + +_LIBCPP_BEGIN_NAMESPACE_STD + +using ::ptrdiff_t; +using ::size_t; + +typedef long double max_align_t; + +#ifdef _LIBCPP_HAS_NO_NULLPTR + +struct _LIBCPP_VISIBLE nullptr_t +{ + void* _; + + struct __nat {int __for_bool_;}; + + _LIBCPP_ALWAYS_INLINE nullptr_t(int __nat::*) {} + + _LIBCPP_ALWAYS_INLINE operator int __nat::*() const {return 0;} + + template + _LIBCPP_ALWAYS_INLINE + operator _Tp* () const {return 0;} + + template + _LIBCPP_ALWAYS_INLINE + operator _Tp _Up::* () const {return 0;} + + friend _LIBCPP_ALWAYS_INLINE bool operator==(nullptr_t, nullptr_t) {return true;} + friend _LIBCPP_ALWAYS_INLINE bool operator!=(nullptr_t, nullptr_t) {return false;} + friend _LIBCPP_ALWAYS_INLINE bool operator<(nullptr_t, nullptr_t) {return false;} + friend _LIBCPP_ALWAYS_INLINE bool operator<=(nullptr_t, nullptr_t) {return true;} + friend _LIBCPP_ALWAYS_INLINE bool operator>(nullptr_t, nullptr_t) {return false;} + friend _LIBCPP_ALWAYS_INLINE bool operator>=(nullptr_t, nullptr_t) {return true;} +}; + +inline _LIBCPP_ALWAYS_INLINE nullptr_t __get_nullptr_t() {return nullptr_t(0);} + +#define nullptr _VSTD::__get_nullptr_t() + +#endif // _LIBCPP_HAS_NO_NULLPTR + +_LIBCPP_END_NAMESPACE_STD + +#ifndef _LIBCPP_HAS_NO_NULLPTR + +namespace std +{ + typedef decltype(nullptr) nullptr_t; +} + +#endif // _LIBCPP_HAS_NO_NULLPTR + +#endif // _LIBCPP_CSTDDEF -- cgit v1.1