BillyONeal created this revision. Update is_trivially_copyable tests with CWG 2094
Clang 5.0 implements this here: https://github.com/llvm-mirror/clang/commit/87cd035326a39523eeb1b295ad36cff337141ef9 MSVC++ will implement it in the first toolset update for VS 2017. https://reviews.llvm.org/D33021 Files: test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_copyable.pass.cpp Index: test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_copyable.pass.cpp =================================================================== --- test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_copyable.pass.cpp +++ test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_copyable.pass.cpp @@ -17,18 +17,26 @@ #include <cassert> #include "test_macros.h" +#ifndef IMPLEMENTS_CWG_2094 + #if (defined(__clang_major__) && __clang_major__ >= 5) || (defined(_MSC_VER) && _MSC_VER >= 1911) + #define IMPLEMENTS_CWG_2094 true + #else /* ^^^ Clang 5.0 or later, MSVC++ 19.11 or later ^^^ // vvv Others vvv */ + #define IMPLEMENTS_CWG_2094 false + #endif /* defined(_MSC_VER) && _MSC_VER >= 1911 */ +#endif + template <class T> void test_is_trivially_copyable() { - static_assert( std::is_trivially_copyable<T>::value, ""); - static_assert( std::is_trivially_copyable<const T>::value, ""); - static_assert(!std::is_trivially_copyable<volatile T>::value, ""); - static_assert(!std::is_trivially_copyable<const volatile T>::value, ""); + static_assert(std::is_trivially_copyable<T>::value, ""); + static_assert(std::is_trivially_copyable<const T>::value, ""); + static_assert(std::is_trivially_copyable<volatile T>::value == IMPLEMENTS_CWG_2094, ""); + static_assert(std::is_trivially_copyable<const volatile T>::value == IMPLEMENTS_CWG_2094, ""); #if TEST_STD_VER > 14 - static_assert( std::is_trivially_copyable_v<T>, ""); - static_assert( std::is_trivially_copyable_v<const T>, ""); - static_assert(!std::is_trivially_copyable_v<volatile T>, ""); - static_assert(!std::is_trivially_copyable_v<const volatile T>, ""); + static_assert(std::is_trivially_copyable_v<T>, ""); + static_assert(std::is_trivially_copyable_v<const T>, ""); + static_assert(std::is_trivially_copyable_v<volatile T> == IMPLEMENTS_CWG_2094, ""); + static_assert(std::is_trivially_copyable_v<const volatile T> == IMPLEMENTS_CWG_2094, ""); #endif }
Index: test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_copyable.pass.cpp =================================================================== --- test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_copyable.pass.cpp +++ test/std/utilities/meta/meta.unary/meta.unary.prop/is_trivially_copyable.pass.cpp @@ -17,18 +17,26 @@ #include <cassert> #include "test_macros.h" +#ifndef IMPLEMENTS_CWG_2094 + #if (defined(__clang_major__) && __clang_major__ >= 5) || (defined(_MSC_VER) && _MSC_VER >= 1911) + #define IMPLEMENTS_CWG_2094 true + #else /* ^^^ Clang 5.0 or later, MSVC++ 19.11 or later ^^^ // vvv Others vvv */ + #define IMPLEMENTS_CWG_2094 false + #endif /* defined(_MSC_VER) && _MSC_VER >= 1911 */ +#endif + template <class T> void test_is_trivially_copyable() { - static_assert( std::is_trivially_copyable<T>::value, ""); - static_assert( std::is_trivially_copyable<const T>::value, ""); - static_assert(!std::is_trivially_copyable<volatile T>::value, ""); - static_assert(!std::is_trivially_copyable<const volatile T>::value, ""); + static_assert(std::is_trivially_copyable<T>::value, ""); + static_assert(std::is_trivially_copyable<const T>::value, ""); + static_assert(std::is_trivially_copyable<volatile T>::value == IMPLEMENTS_CWG_2094, ""); + static_assert(std::is_trivially_copyable<const volatile T>::value == IMPLEMENTS_CWG_2094, ""); #if TEST_STD_VER > 14 - static_assert( std::is_trivially_copyable_v<T>, ""); - static_assert( std::is_trivially_copyable_v<const T>, ""); - static_assert(!std::is_trivially_copyable_v<volatile T>, ""); - static_assert(!std::is_trivially_copyable_v<const volatile T>, ""); + static_assert(std::is_trivially_copyable_v<T>, ""); + static_assert(std::is_trivially_copyable_v<const T>, ""); + static_assert(std::is_trivially_copyable_v<volatile T> == IMPLEMENTS_CWG_2094, ""); + static_assert(std::is_trivially_copyable_v<const volatile T> == IMPLEMENTS_CWG_2094, ""); #endif }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits