blob: 68f70b80e92e266e44673805380d28c76a948217 [file] [log] [blame]
Howard Hinnant3e519522010-05-11 19:42:16 +00001//===----------------------------------------------------------------------===//
2//
Howard Hinnant5b08a8a2010-05-11 21:36:01 +00003// The LLVM Compiler Infrastructure
Howard Hinnant3e519522010-05-11 19:42:16 +00004//
Howard Hinnant412dbeb2010-11-16 22:09:02 +00005// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
Howard Hinnant3e519522010-05-11 19:42:16 +00007//
8//===----------------------------------------------------------------------===//
9
10// <stddef.h>
11
12#include <stddef.h>
Richard Smithd6cffc42015-10-08 22:25:27 +000013#include <cassert>
Howard Hinnant3e519522010-05-11 19:42:16 +000014#include <type_traits>
15
Marshall Clowa9daa962018-03-06 15:01:55 +000016#include "test_macros.h"
17
Howard Hinnant3e519522010-05-11 19:42:16 +000018#ifndef NULL
19#error NULL not defined
20#endif
21
22#ifndef offsetof
23#error offsetof not defined
24#endif
25
26int main()
27{
Richard Smithd6cffc42015-10-08 22:25:27 +000028 void *p = NULL;
29 assert(!p);
30
Howard Hinnant3e519522010-05-11 19:42:16 +000031 static_assert(sizeof(size_t) == sizeof(void*),
32 "sizeof(size_t) == sizeof(void*)");
33 static_assert(std::is_unsigned<size_t>::value,
34 "std::is_unsigned<size_t>::value");
35 static_assert(std::is_integral<size_t>::value,
36 "std::is_integral<size_t>::value");
37 static_assert(sizeof(ptrdiff_t) == sizeof(void*),
38 "sizeof(ptrdiff_t) == sizeof(void*)");
39 static_assert(std::is_signed<ptrdiff_t>::value,
40 "std::is_signed<ptrdiff_t>::value");
41 static_assert(std::is_integral<ptrdiff_t>::value,
42 "std::is_integral<ptrdiff_t>::value");
Richard Smith55a7a242015-10-08 23:44:26 +000043 static_assert((std::is_same<decltype(nullptr), nullptr_t>::value),
Richard Smithd6cffc42015-10-08 22:25:27 +000044 "decltype(nullptr) == nullptr_t");
45 static_assert(sizeof(nullptr_t) == sizeof(void*),
46 "sizeof(nullptr_t) == sizeof(void*)");
Marshall Clowa9daa962018-03-06 15:01:55 +000047#if TEST_STD_VER > 17
48// P0767
49 static_assert(std::is_trivial<max_align_t>::value,
50 "std::is_trivial<max_align_t>::value");
Marshall Clow4a6f3c42018-03-21 00:36:05 +000051 static_assert(std::is_standard_layout<max_align_t>::value,
52 "std::is_standard_layout<max_align_t>::value");
Marshall Clowa9daa962018-03-06 15:01:55 +000053#else
Richard Smithd6cffc42015-10-08 22:25:27 +000054 static_assert(std::is_pod<max_align_t>::value,
55 "std::is_pod<max_align_t>::value");
Marshall Clowa9daa962018-03-06 15:01:55 +000056#endif
Richard Smithd6cffc42015-10-08 22:25:27 +000057 static_assert((std::alignment_of<max_align_t>::value >=
58 std::alignment_of<long long>::value),
59 "std::alignment_of<max_align_t>::value >= "
60 "std::alignment_of<long long>::value");
61 static_assert(std::alignment_of<max_align_t>::value >=
62 std::alignment_of<long double>::value,
63 "std::alignment_of<max_align_t>::value >= "
64 "std::alignment_of<long double>::value");
65 static_assert(std::alignment_of<max_align_t>::value >=
66 std::alignment_of<void*>::value,
67 "std::alignment_of<max_align_t>::value >= "
68 "std::alignment_of<void*>::value");
Howard Hinnant3e519522010-05-11 19:42:16 +000069}