11468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant//===----------------------------------------------------------------------===// 21468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant// 31468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant// The LLVM Compiler Infrastructure 41468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant// 51468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 61468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant// Source Licenses. See LICENSE.TXT for details. 71468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant// 81468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant//===----------------------------------------------------------------------===// 91468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant 101468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant// type_traits 111468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant 121468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant// is_trivially_copy_constructible 131468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant 141468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant#include <type_traits> 151468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant 161468b668aa964beb1220e9b36162b092fb54952bHoward Hinnanttemplate <class T> 171468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantvoid test_is_trivially_copy_constructible() 181468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant{ 191468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant static_assert( std::is_trivially_copy_constructible<T>::value, ""); 201468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant static_assert( std::is_trivially_copy_constructible<const T>::value, ""); 211468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant} 221468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant 231468b668aa964beb1220e9b36162b092fb54952bHoward Hinnanttemplate <class T> 241468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantvoid test_has_not_trivial_copy_constructor() 251468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant{ 261468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant static_assert(!std::is_trivially_copy_constructible<T>::value, ""); 271468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant static_assert(!std::is_trivially_copy_constructible<const T>::value, ""); 281468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant} 291468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant 301468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantclass Empty 311468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant{ 321468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant}; 331468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant 341468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantclass NotEmpty 351468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant{ 361468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantpublic: 371468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant virtual ~NotEmpty(); 381468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant}; 391468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant 401468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantunion Union {}; 411468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant 421468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantstruct bit_zero 431468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant{ 441468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant int : 0; 451468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant}; 461468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant 471468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantclass Abstract 481468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant{ 491468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantpublic: 501468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant virtual ~Abstract() = 0; 511468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant}; 521468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant 531468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantstruct A 541468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant{ 551468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant A(const A&); 561468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant}; 571468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant 581468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantint main() 591468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant{ 601468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant test_has_not_trivial_copy_constructor<void>(); 611468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant test_has_not_trivial_copy_constructor<A>(); 621468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant test_has_not_trivial_copy_constructor<Abstract>(); 631468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant test_has_not_trivial_copy_constructor<NotEmpty>(); 641468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant 651468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant test_is_trivially_copy_constructible<int&>(); 661468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant test_is_trivially_copy_constructible<Union>(); 671468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant test_is_trivially_copy_constructible<Empty>(); 681468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant test_is_trivially_copy_constructible<int>(); 691468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant test_is_trivially_copy_constructible<double>(); 701468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant test_is_trivially_copy_constructible<int*>(); 711468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant test_is_trivially_copy_constructible<const int*>(); 721468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant test_is_trivially_copy_constructible<bit_zero>(); 731468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant} 74