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-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 // type_traits 10 11 // is_copy_assignable 12 13 #include <type_traits> 14 #include "test_macros.h" 15 16 template <class T> test_is_const()17void test_is_copy_assignable() 18 { 19 static_assert(( std::is_copy_assignable<T>::value), ""); 20 #if TEST_STD_VER > 14 21 static_assert(( std::is_copy_assignable_v<T>), ""); 22 #endif 23 } 24 25 template <class T> 26 void test_is_not_copy_assignable() 27 { 28 static_assert((!std::is_copy_assignable<T>::value), ""); 29 #if TEST_STD_VER > 14 30 static_assert((!std::is_copy_assignable_v<T>), ""); 31 #endif 32 } main(int,char **)33 34 class Empty 35 { 36 }; 37 38 class NotEmpty 39 { 40 public: 41 virtual ~NotEmpty(); 42 }; 43 44 union Union {}; 45 46 struct bit_zero 47 { 48 int : 0; 49 }; 50 51 struct A 52 { 53 A(); 54 }; 55 56 class B 57 { 58 B& operator=(const B&); 59 }; 60 61 struct C 62 { 63 void operator=(C&); // not const 64 }; 65 66 int main(int, char**) 67 { 68 test_is_copy_assignable<int> (); 69 test_is_copy_assignable<int&> (); 70 test_is_copy_assignable<A> (); 71 test_is_copy_assignable<bit_zero> (); 72 test_is_copy_assignable<Union> (); 73 test_is_copy_assignable<NotEmpty> (); 74 test_is_copy_assignable<Empty> (); 75 76 #if TEST_STD_VER >= 11 77 test_is_not_copy_assignable<const int> (); 78 test_is_not_copy_assignable<int[]> (); 79 test_is_not_copy_assignable<int[3]> (); 80 test_is_not_copy_assignable<B> (); 81 #endif 82 test_is_not_copy_assignable<void> (); 83 test_is_not_copy_assignable<C> (); 84 85 return 0; 86 } 87