//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // type_traits // is_trivially_assignable #include <type_traits> #include "test_macros.h" template <class T, class U> void test_is_trivially_assignable() { static_assert(( std::is_trivially_assignable<T, U>::value), ""); #if TEST_STD_VER > 14 static_assert(( std::is_trivially_assignable_v<T, U>), ""); #endif } template <class T, class U> void test_is_not_trivially_assignable() { static_assert((!std::is_trivially_assignable<T, U>::value), ""); #if TEST_STD_VER > 14 static_assert((!std::is_trivially_assignable_v<T, U>), ""); #endif } struct A { }; struct B { void operator=(A); }; struct C { void operator=(C&); // not const }; int main(int, char**) { test_is_trivially_assignable<int&, int&> (); test_is_trivially_assignable<int&, int> (); test_is_trivially_assignable<int&, double> (); test_is_not_trivially_assignable<int, int&> (); test_is_not_trivially_assignable<int, int> (); test_is_not_trivially_assignable<B, A> (); test_is_not_trivially_assignable<A, B> (); test_is_not_trivially_assignable<C&, C&> (); return 0; }