1// -*- C++ -*-
2//===--------------------------- stddef.h ---------------------------------===//
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#if defined(__need_ptrdiff_t) || defined(__need_size_t) || \
11 defined(__need_wchar_t) || defined(__need_NULL) || defined(__need_wint_t)
12
13#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
14#pragma GCC system_header
15#endif
16
17#include_next <stddef.h>
18
19#elif !defined(_LIBCPP_STDDEF_H)
20#define _LIBCPP_STDDEF_H
21
22/*
23 stddef.h synopsis
24
25Macros:
26
27 offsetof(type,member-designator)
28 NULL
29
30Types:
31
32 ptrdiff_t
33 size_t
34 max_align_t
35 nullptr_t
36
37*/
38
39#include <__config>
40
41#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
42#pragma GCC system_header
43#endif
44
45#include_next <stddef.h>
46
47#ifdef __cplusplus
48
49extern "C++" {
50#include <__nullptr>
51using std::nullptr_t;
52}
53
54// Re-use the compiler's <stddef.h> max_align_t where possible.
55#if !defined(__CLANG_MAX_ALIGN_T_DEFINED) && !defined(_GCC_MAX_ALIGN_T) && \
56 !defined(__DEFINED_max_align_t) && !defined(__NetBSD__)
57typedef long double max_align_t;
58#endif
59
60#endif
61
62#endif // _LIBCPP_STDDEF_H
63