84 lines · cpp
1// RUN: %clang_cc1 -triple arm64-apple-ios7.0 -std=c++11 -verify %s2// expected-no-diagnostics3 4struct true_type {5 static constexpr const bool value = true;6};7 8struct false_type {9 static constexpr const bool value = false;10};11 12template <class _Tp, class _Up> struct is_same : public false_type {};13template <class _Tp> struct is_same<_Tp, _Tp> : public true_type {};14 15// Check that our 'is_same' works.16static_assert(is_same<char, char>::value, "is_same is broken");17static_assert(!is_same<char, char *>::value, "is_same is broken");18 19template <class _Tp, unsigned _AlignOf, unsigned _SizeOf>20struct check_type {21 static constexpr const bool value =22 (alignof(_Tp) == _AlignOf) && (sizeof(_Tp) == _SizeOf);23};24 25//===----------------------------------------------------------------------===//26// Fundamental types27//===----------------------------------------------------------------------===//28 29static_assert(check_type<bool, 1, 1>::value, "bool is wrong");30 31static_assert(check_type<char, 1, 1>::value, "char is wrong");32static_assert(check_type<signed char, 1, 1>::value, "signed char is wrong");33static_assert(check_type<unsigned char, 1, 1>::value, "unsigned char is wrong");34 35static_assert(check_type<char16_t, 2, 2>::value, "char16_t is wrong");36static_assert(check_type<char32_t, 4, 4>::value, "char32_t is wrong");37static_assert(check_type<wchar_t, 4, 4>::value, "wchar_t is wrong");38 39static_assert(check_type<short, 2, 2>::value, "short is wrong");40static_assert(check_type<unsigned short, 2, 2>::value, "unsigned short is wrong");41 42static_assert(check_type<int, 4, 4>::value, "int is wrong");43static_assert(check_type<unsigned int, 4, 4>::value, "unsigned int is wrong");44 45static_assert(check_type<long, 8, 8>::value, "long is wrong");46static_assert(check_type<unsigned long, 8, 8>::value, "unsigned long is wrong");47 48static_assert(check_type<long long, 8, 8>::value, "long long is wrong");49static_assert(check_type<unsigned long long, 8, 8>::value, "unsigned long long is wrong");50 51static_assert(check_type<float, 4, 4>::value, "float is wrong");52static_assert(check_type<double, 8, 8>::value, "double is wrong");53static_assert(check_type<long double, 8, 8>::value, "long double is wrong");54 55static_assert(check_type<void *, 8, 8>::value, "'void *' is wrong");56static_assert(check_type<int (*)(int), 8, 8>::value, "function pointer is wrong");57 58//===----------------------------------------------------------------------===//59// stdarg.h60//===----------------------------------------------------------------------===//61 62#include <stdarg.h>63 64static_assert(check_type<va_list, 8, 8>::value, "va_list is wrong");65 66//===----------------------------------------------------------------------===//67// stddef.h68//===----------------------------------------------------------------------===//69 70#define __STDC_WANT_LIB_EXT1__ 171#include <stddef.h>72 73static_assert(is_same<long int, ::ptrdiff_t>::value, "::ptrdiff_t is wrong");74static_assert(is_same<decltype(sizeof(char)), ::size_t>::value, "::size_t is wrong");75static_assert(is_same<long unsigned int, ::size_t>::value, "::size_t is wrong");76static_assert(is_same<long unsigned int, ::rsize_t>::value, "::rsize_t is wrong");77static_assert(is_same<long double, ::max_align_t>::value, "::max_align_t is wrong");78 79#define __need_wint_t80#include <stddef.h>81 82static_assert(is_same<int, ::wint_t>::value, "::wint_t is wrong");83 84