[libcxx-commits] [libcxx] [libcxxabi] [libc++] P3247R2: Deprecate `is_trivial(_v)` (PR #130573)

Nikolas Klauser via libcxx-commits libcxx-commits at lists.llvm.org
Mon Mar 10 06:49:12 PDT 2025


================
@@ -10,26 +10,34 @@
 #include <type_traits>
 #include "test_macros.h"
 
-// XFAIL: c++03, c++11, c++14
+// REQUIRES: std-at-least-c++17
 
 // std::byte is not an integer type, nor a character type.
-// It is a distinct type for accessing the bits that ultimately make up object storage.
+// It is a distinct scoped enumeration type for accessing the bits that ultimately make up object storage.
 
-#if TEST_STD_VER > 17
-static_assert( std::is_trivial<std::byte>::value, "" );   // P0767
-#else
-static_assert( std::is_pod<std::byte>::value, "" );
+static_assert(std::is_enum_v<std::byte>);
+#if TEST_STD_VER >= 23
+static_assert(std::is_scoped_enum_v<std::byte>);
 #endif
-static_assert(!std::is_arithmetic<std::byte>::value, "" );
-static_assert(!std::is_integral<std::byte>::value, "" );
+static_assert(std::is_same_v<std::underlying_type_t<std::byte>, unsigned char>);
+static_assert(!std::is_convertible_v<std::byte, unsigned char>);
+static_assert(sizeof(std::byte) == 1);
 
-static_assert(!std::is_same<std::byte,          char>::value, "" );
-static_assert(!std::is_same<std::byte,   signed char>::value, "" );
-static_assert(!std::is_same<std::byte, unsigned char>::value, "" );
+static_assert(std::is_trivially_copyable_v<std::byte>);
+static_assert(std::is_trivially_default_constructible_v<std::byte>);
+#if TEST_STD_VER < 26 // P3247R2
+static_assert(std::is_trivial_v<std::byte>);
+#endif
+#if TEST_STD_VER < 20 // P0767R1
+static_assert(std::is_pod_v<std::byte>);
+#endif
+static_assert(std::is_standard_layout_v<std::byte>);
+
+static_assert(!std::is_arithmetic_v<std::byte>);
+static_assert(!std::is_integral_v<std::byte>);
 
-// The standard doesn't outright say this, but it's pretty clear that it has to be true.
-static_assert(sizeof(std::byte) == 1, "" );
+static_assert(!std::is_same_v<std::byte, char>);
+static_assert(!std::is_same_v<std::byte, signed char>);
+static_assert(!std::is_same_v<std::byte, unsigned char>);
 
-int main(int, char**) {
-  return 0;
-}
+int main(int, char**) { return 0; }
----------------
philnik777 wrote:

Also, this should be a `.compile.pass.cpp`.

https://github.com/llvm/llvm-project/pull/130573


More information about the libcxx-commits mailing list