First part of P0482 - Establish that char8_t is an integral type, and that numeric_li...
authorMarshall Clow <mclow.lists@gmail.com>
Thu, 29 Nov 2018 23:21:18 +0000 (23:21 +0000)
committerMarshall Clow <mclow.lists@gmail.com>
Thu, 29 Nov 2018 23:21:18 +0000 (23:21 +0000)
llvm-svn: 347930

35 files changed:
libcxx/include/limits
libcxx/include/type_traits
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/const_data_members.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/denorm_min.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/digits.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/digits10.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/epsilon.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/has_denorm.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/has_denorm_loss.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/has_infinity.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/has_quiet_NaN.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/has_signaling_NaN.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/infinity.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/is_bounded.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/is_exact.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/is_iec559.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/is_integer.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/is_modulo.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/is_signed.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/lowest.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/max.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/max_digits10.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/max_exponent.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/max_exponent10.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/min.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/min_exponent.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/min_exponent10.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/quiet_NaN.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/radix.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/round_error.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/round_style.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/signaling_NaN.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/tinyness_before.pass.cpp
libcxx/test/std/language.support/support.limits/limits/numeric.limits.members/traps.pass.cpp
libcxx/test/std/utilities/meta/meta.unary/meta.unary.cat/is_integral.pass.cpp

index f530507..5b75f4a 100644 (file)
@@ -82,6 +82,7 @@ template<> class numeric_limits<cv char>;
 template<> class numeric_limits<cv signed char>;
 template<> class numeric_limits<cv unsigned char>;
 template<> class numeric_limits<cv wchar_t>;
+template<> class numeric_limits<cv char8_t>; // C++20
 template<> class numeric_limits<cv char16_t>;
 template<> class numeric_limits<cv char32_t>;
 
index aadb97b..09c0019 100644 (file)
@@ -709,6 +709,9 @@ template <>          struct __libcpp_is_integral<char>               : public tr
 template <>          struct __libcpp_is_integral<signed char>        : public true_type {};
 template <>          struct __libcpp_is_integral<unsigned char>      : public true_type {};
 template <>          struct __libcpp_is_integral<wchar_t>            : public true_type {};
+#if _LIBCPP_STD_VER > 17 && defined(__cpp_char8_t)
+template <>          struct __libcpp_is_integral<char8_t>            : public true_type {};
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
 template <>          struct __libcpp_is_integral<char16_t>           : public true_type {};
 template <>          struct __libcpp_is_integral<char32_t>           : public true_type {};
index 6a46c37..11772f6 100644 (file)
@@ -9,6 +9,8 @@
 
 #include <limits>
 
+#include "test_macros.h"
+
 /*
 <limits>:
     numeric_limits
@@ -99,6 +101,14 @@ int main()
     TEST_NUMERIC_LIMITS(volatile wchar_t)
     TEST_NUMERIC_LIMITS(const volatile wchar_t)
 
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    // char8_t
+    TEST_NUMERIC_LIMITS(char8_t)
+    TEST_NUMERIC_LIMITS(const char8_t)
+    TEST_NUMERIC_LIMITS(volatile char8_t)
+    TEST_NUMERIC_LIMITS(const volatile char8_t)
+#endif
+
     // char16_t
     TEST_NUMERIC_LIMITS(char16_t)
     TEST_NUMERIC_LIMITS(const char16_t)
index 8deb28d..8a3ca00 100644 (file)
@@ -15,6 +15,8 @@
 #include <cfloat>
 #include <cassert>
 
+#include "test_macros.h"
+
 template <class T>
 void
 test(T expected)
@@ -32,6 +34,9 @@ int main()
     test<signed char>(0);
     test<unsigned char>(0);
     test<wchar_t>(0);
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t>(0);
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t>(0);
     test<char32_t>(0);
index 2dfea08..7dec03d 100644 (file)
@@ -14,6 +14,8 @@
 #include <limits>
 #include <cfloat>
 
+#include "test_macros.h"
+
 template <class T, int expected>
 void
 test()
@@ -31,6 +33,9 @@ int main()
     test<signed char, 7>();
     test<unsigned char, 8>();
     test<wchar_t, std::numeric_limits<wchar_t>::is_signed ? sizeof(wchar_t)*8-1 : sizeof(wchar_t)*8>();
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t, 8>();
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t, 16>();
     test<char32_t, 32>();
index 2c5302c..017f863 100644 (file)
@@ -14,6 +14,8 @@
 #include <limits>
 #include <cfloat>
 
+#include "test_macros.h"
+
 template <class T, int expected>
 void
 test()
@@ -35,6 +37,9 @@ int main()
     test<signed char, 2>();
     test<unsigned char, 2>();
     test<wchar_t, 5*sizeof(wchar_t)/2-1>();  // 4 -> 9 and 2 -> 4
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t, 2>();
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t, 4>();
     test<char32_t, 9>();
index 0cce484..b27f5c5 100644 (file)
@@ -15,6 +15,8 @@
 #include <cfloat>
 #include <cassert>
 
+#include "test_macros.h"
+
 template <class T>
 void
 test(T expected)
@@ -32,6 +34,9 @@ int main()
     test<signed char>(0);
     test<unsigned char>(0);
     test<wchar_t>(0);
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t>(0);
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t>(0);
     test<char32_t>(0);
index e618020..5096ad2 100644 (file)
@@ -13,6 +13,8 @@
 
 #include <limits>
 
+#include "test_macros.h"
+
 template <class T, std::float_denorm_style expected>
 void
 test()
@@ -30,6 +32,9 @@ int main()
     test<signed char, std::denorm_absent>();
     test<unsigned char, std::denorm_absent>();
     test<wchar_t, std::denorm_absent>();
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t, std::denorm_absent>();
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t, std::denorm_absent>();
     test<char32_t, std::denorm_absent>();
index 660ecf5..1b087f0 100644 (file)
@@ -13,6 +13,8 @@
 
 #include <limits>
 
+#include "test_macros.h"
+
 template <class T, bool expected>
 void
 test()
@@ -30,6 +32,9 @@ int main()
     test<signed char, false>();
     test<unsigned char, false>();
     test<wchar_t, false>();
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t, false>();
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t, false>();
     test<char32_t, false>();
index f8ca205..1391f20 100644 (file)
@@ -13,6 +13,8 @@
 
 #include <limits>
 
+#include "test_macros.h"
+
 template <class T, bool expected>
 void
 test()
@@ -30,6 +32,9 @@ int main()
     test<signed char, false>();
     test<unsigned char, false>();
     test<wchar_t, false>();
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t, false>();
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t, false>();
     test<char32_t, false>();
index 7592171..cb5736f 100644 (file)
@@ -13,6 +13,8 @@
 
 #include <limits>
 
+#include "test_macros.h"
+
 template <class T, bool expected>
 void
 test()
@@ -30,6 +32,9 @@ int main()
     test<signed char, false>();
     test<unsigned char, false>();
     test<wchar_t, false>();
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t, false>();
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t, false>();
     test<char32_t, false>();
index d68cd5d..4f43a65 100644 (file)
@@ -13,6 +13,8 @@
 
 #include <limits>
 
+#include "test_macros.h"
+
 template <class T, bool expected>
 void
 test()
@@ -30,6 +32,9 @@ int main()
     test<signed char, false>();
     test<unsigned char, false>();
     test<wchar_t, false>();
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t, false>();
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t, false>();
     test<char32_t, false>();
index 033ecdc..241f9cc 100644 (file)
@@ -15,6 +15,8 @@
 #include <cfloat>
 #include <cassert>
 
+#include "test_macros.h"
+
 template <class T>
 void
 test(T expected)
@@ -34,6 +36,9 @@ int main()
     test<signed char>(0);
     test<unsigned char>(0);
     test<wchar_t>(0);
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t>(0);
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t>(0);
     test<char32_t>(0);
index fa714d5..e00afa9 100644 (file)
@@ -13,6 +13,8 @@
 
 #include <limits>
 
+#include "test_macros.h"
+
 template <class T, bool expected>
 void
 test()
@@ -30,6 +32,9 @@ int main()
     test<signed char, true>();
     test<unsigned char, true>();
     test<wchar_t, true>();
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t, true>();
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t, true>();
     test<char32_t, true>();
index b96a0e7..8431b73 100644 (file)
@@ -13,6 +13,8 @@
 
 #include <limits>
 
+#include "test_macros.h"
+
 template <class T, bool expected>
 void
 test()
@@ -30,6 +32,9 @@ int main()
     test<signed char, true>();
     test<unsigned char, true>();
     test<wchar_t, true>();
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t, true>();
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t, true>();
     test<char32_t, true>();
index 4408714..2e9ac22 100644 (file)
@@ -13,6 +13,8 @@
 
 #include <limits>
 
+#include "test_macros.h"
+
 template <class T, bool expected>
 void
 test()
@@ -30,6 +32,9 @@ int main()
     test<signed char, false>();
     test<unsigned char, false>();
     test<wchar_t, false>();
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t, false>();
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t, false>();
     test<char32_t, false>();
index 79bc586..6e321d1 100644 (file)
@@ -13,6 +13,8 @@
 
 #include <limits>
 
+#include "test_macros.h"
+
 template <class T, bool expected>
 void
 test()
@@ -30,6 +32,9 @@ int main()
     test<signed char, true>();
     test<unsigned char, true>();
     test<wchar_t, true>();
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t, true>();
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t, true>();
     test<char32_t, true>();
index 6a60996..f6412a9 100644 (file)
@@ -13,6 +13,8 @@
 
 #include <limits>
 
+#include "test_macros.h"
+
 template <class T, bool expected>
 void
 test()
@@ -30,6 +32,9 @@ int main()
     test<signed char, false>();
     test<unsigned char, true>();
 //    test<wchar_t, false>(); // don't know
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t, true>();
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t, true>();
     test<char32_t, true>();
index 28570fd..b7a8926 100644 (file)
@@ -13,6 +13,8 @@
 
 #include <limits>
 
+#include "test_macros.h"
+
 template <class T, bool expected>
 void
 test()
@@ -30,6 +32,9 @@ int main()
     test<signed char, true>();
     test<unsigned char, false>();
     test<wchar_t, wchar_t(-1) < wchar_t(0)>();
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t, false>();
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t, false>();
     test<char32_t, false>();
index 21090aa..f505f41 100644 (file)
@@ -17,6 +17,8 @@
 #include <cfloat>
 #include <cassert>
 
+#include "test_macros.h"
+
 template <class T>
 void
 test(T expected)
@@ -38,6 +40,9 @@ int main()
     test<signed char>(SCHAR_MIN);
     test<unsigned char>(0);
     test<wchar_t>(WCHAR_MIN);
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t>(0);
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t>(0);
     test<char32_t>(0);
index 7517aaa..65d5150 100644 (file)
@@ -17,6 +17,8 @@
 #include <cfloat>
 #include <cassert>
 
+#include "test_macros.h"
+
 template <class T>
 void
 test(T expected)
@@ -38,6 +40,9 @@ int main()
     test<signed char>(SCHAR_MAX);
     test<unsigned char>(UCHAR_MAX);
     test<wchar_t>(WCHAR_MAX);
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t>(UCHAR_MAX); // ??
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t>(USHRT_MAX);
     test<char32_t>(UINT_MAX);
index de771eb..158e279 100644 (file)
@@ -14,6 +14,8 @@
 #include <limits>
 #include <cfloat>
 
+#include "test_macros.h"
+
 template <class T, int expected>
 void
 test()
@@ -31,6 +33,9 @@ int main()
     test<signed char, 0>();
     test<unsigned char, 0>();
     test<wchar_t, 0>();
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t, 0>();
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t, 0>();
     test<char32_t, 0>();
index 6b61f7b..6493109 100644 (file)
@@ -14,6 +14,8 @@
 #include <limits>
 #include <cfloat>
 
+#include "test_macros.h"
+
 template <class T, int expected>
 void
 test()
@@ -31,6 +33,9 @@ int main()
     test<signed char, 0>();
     test<unsigned char, 0>();
     test<wchar_t, 0>();
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t, 0>();
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t, 0>();
     test<char32_t, 0>();
index 927585e..c4c7a30 100644 (file)
@@ -14,6 +14,8 @@
 #include <limits>
 #include <cfloat>
 
+#include "test_macros.h"
+
 template <class T, int expected>
 void
 test()
@@ -31,6 +33,9 @@ int main()
     test<signed char, 0>();
     test<unsigned char, 0>();
     test<wchar_t, 0>();
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t, 0>();
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t, 0>();
     test<char32_t, 0>();
index e72fbba..a1e61fc 100644 (file)
@@ -17,6 +17,8 @@
 #include <cfloat>
 #include <cassert>
 
+#include "test_macros.h"
+
 template <class T>
 void
 test(T expected)
@@ -38,6 +40,9 @@ int main()
     test<signed char>(SCHAR_MIN);
     test<unsigned char>(0);
     test<wchar_t>(WCHAR_MIN);
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t>(0);
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t>(0);
     test<char32_t>(0);
index 245e844..930d011 100644 (file)
@@ -14,6 +14,8 @@
 #include <limits>
 #include <cfloat>
 
+#include "test_macros.h"
+
 template <class T, int expected>
 void
 test()
@@ -31,6 +33,9 @@ int main()
     test<signed char, 0>();
     test<unsigned char, 0>();
     test<wchar_t, 0>();
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t, 0>();
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t, 0>();
     test<char32_t, 0>();
index b54d46f..05891b1 100644 (file)
@@ -14,6 +14,8 @@
 #include <limits>
 #include <cfloat>
 
+#include "test_macros.h"
+
 template <class T, int expected>
 void
 test()
@@ -31,6 +33,9 @@ int main()
     test<signed char, 0>();
     test<unsigned char, 0>();
     test<wchar_t, 0>();
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t, 0>();
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t, 0>();
     test<char32_t, 0>();
index 97166f0..5d5597c 100644 (file)
@@ -16,6 +16,8 @@
 #include <type_traits>
 #include <cassert>
 
+#include "test_macros.h"
+
 template <class T>
 void
 test_imp(std::true_type)
@@ -51,6 +53,9 @@ int main()
     test<signed char>();
     test<unsigned char>();
     test<wchar_t>();
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t>();
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t>();
     test<char32_t>();
index 98a2a53..1514ae8 100644 (file)
@@ -14,6 +14,8 @@
 #include <limits>
 #include <cfloat>
 
+#include "test_macros.h"
+
 template <class T, int expected>
 void
 test()
@@ -31,6 +33,9 @@ int main()
     test<signed char, 2>();
     test<unsigned char, 2>();
     test<wchar_t, 2>();
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t, 2>();
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t, 2>();
     test<char32_t, 2>();
index 5da5c95..3c2dc54 100644 (file)
@@ -15,6 +15,8 @@
 #include <cfloat>
 #include <cassert>
 
+#include "test_macros.h"
+
 template <class T>
 void
 test(T expected)
@@ -32,6 +34,9 @@ int main()
     test<signed char>(0);
     test<unsigned char>(0);
     test<wchar_t>(0);
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t>(0);
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t>(0);
     test<char32_t>(0);
index 645f6f7..f1fd200 100644 (file)
@@ -13,6 +13,8 @@
 
 #include <limits>
 
+#include "test_macros.h"
+
 template <class T, std::float_round_style expected>
 void
 test()
@@ -30,6 +32,9 @@ int main()
     test<signed char, std::round_toward_zero>();
     test<unsigned char, std::round_toward_zero>();
     test<wchar_t, std::round_toward_zero>();
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t, std::round_toward_zero>();
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t, std::round_toward_zero>();
     test<char32_t, std::round_toward_zero>();
index d9df999..a0a6d7f 100644 (file)
@@ -16,6 +16,8 @@
 #include <type_traits>
 #include <cassert>
 
+#include "test_macros.h"
+
 template <class T>
 void
 test_imp(std::true_type)
@@ -51,6 +53,9 @@ int main()
     test<signed char>();
     test<unsigned char>();
     test<wchar_t>();
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t>();
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t>();
     test<char32_t>();
index 9e2a843..901eea4 100644 (file)
@@ -13,6 +13,8 @@
 
 #include <limits>
 
+#include "test_macros.h"
+
 template <class T, bool expected>
 void
 test()
@@ -30,6 +32,9 @@ int main()
     test<signed char, false>();
     test<unsigned char, false>();
     test<wchar_t, false>();
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t, false>();
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t, false>();
     test<char32_t, false>();
index 23811fa..8e407c2 100644 (file)
@@ -13,6 +13,8 @@
 
 #include <limits>
 
+#include "test_macros.h"
+
 #if defined(__i386__) || defined(__x86_64__) || defined(__pnacl__) || \
     defined(__wasm__)
 static const bool integral_types_trap = true;
@@ -37,6 +39,9 @@ int main()
     test<signed char, integral_types_trap>();
     test<unsigned char, integral_types_trap>();
     test<wchar_t, integral_types_trap>();
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test<char8_t, integral_types_trap>();
+#endif
 #ifndef _LIBCPP_HAS_NO_UNICODE_CHARS
     test<char16_t, integral_types_trap>();
     test<char32_t, integral_types_trap>();
index 0999762..fa81b11 100644 (file)
@@ -85,6 +85,9 @@ int main()
     test_is_integral<signed char>();
     test_is_integral<unsigned char>();
     test_is_integral<wchar_t>();
+#if TEST_STD_VER > 17 && defined(__cpp_char8_t)
+    test_is_integral<char8_t>();
+#endif
 
     test_is_not_integral<std::nullptr_t>();
     test_is_not_integral<void>();