67 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// type_traits10 11// is_trivial12 13// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS14 15#include <type_traits>16#include "test_macros.h"17 18template <class T>19void test_is_trivial()20{21 static_assert( std::is_trivial<T>::value, "");22 static_assert( std::is_trivial<const T>::value, "");23 static_assert( std::is_trivial<volatile T>::value, "");24 static_assert( std::is_trivial<const volatile T>::value, "");25#if TEST_STD_VER > 1426 static_assert( std::is_trivial_v<T>, "");27 static_assert( std::is_trivial_v<const T>, "");28 static_assert( std::is_trivial_v<volatile T>, "");29 static_assert( std::is_trivial_v<const volatile T>, "");30#endif31}32 33template <class T>34void test_is_not_trivial()35{36 static_assert(!std::is_trivial<T>::value, "");37 static_assert(!std::is_trivial<const T>::value, "");38 static_assert(!std::is_trivial<volatile T>::value, "");39 static_assert(!std::is_trivial<const volatile T>::value, "");40#if TEST_STD_VER > 1441 static_assert(!std::is_trivial_v<T>, "");42 static_assert(!std::is_trivial_v<const T>, "");43 static_assert(!std::is_trivial_v<volatile T>, "");44 static_assert(!std::is_trivial_v<const volatile T>, "");45#endif46}47 48struct A {};49 50class B51{52public:53 B();54};55 56int main(int, char**)57{58 test_is_trivial<int> ();59 test_is_trivial<A> ();60 61 test_is_not_trivial<int&> ();62 test_is_not_trivial<volatile int&> ();63 test_is_not_trivial<B> ();64 65 return 0;66}67