15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===// 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The LLVM Compiler Infrastructure 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is dual licensed under the MIT and the University of Illinois Open 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Source Licenses. See LICENSE.TXT for details. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===// 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// type_traits 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// is_copy_assignable 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <type_traits> 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <class T> 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void test_is_copy_assignable() 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static_assert(( std::is_copy_assignable<T>::value), ""); 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <class T> 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void test_is_not_copy_assignable() 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles){ 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_assert((!std::is_copy_assignable<T>::value), ""); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Empty 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class NotEmpty 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){ 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdochpublic: 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~NotEmpty(); 36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}; 37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdochunion Union {}; 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochstruct bit_zero 41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch{ 42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch int : 0; 43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}; 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochstruct A 46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch{ 47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch A(); 48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}; 49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class B 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles){ 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) B& operator=(const B&); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int main() 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_is_copy_assignable<int> (); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_is_copy_assignable<int&> (); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_is_copy_assignable<A> (); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_is_copy_assignable<bit_zero> (); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_is_copy_assignable<Union> (); 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch test_is_copy_assignable<NotEmpty> (); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_is_copy_assignable<Empty> (); 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_is_not_copy_assignable<const int> (); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_is_not_copy_assignable<int[]> (); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_is_not_copy_assignable<int[3]> (); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if __has_feature(cxx_access_control_sfinae) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_is_not_copy_assignable<B> (); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_is_not_copy_assignable<void> (); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)