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_move_constructible 131468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant 141468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant#include <type_traits> 151468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant 16933afa9761c1c1f916161278a99284d50a594939Marshall Clowtemplate <class T> 171468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantvoid test_is_move_constructible() 181468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant{ 19933afa9761c1c1f916161278a99284d50a594939Marshall Clow static_assert( std::is_move_constructible<T>::value, ""); 20933afa9761c1c1f916161278a99284d50a594939Marshall Clow} 21933afa9761c1c1f916161278a99284d50a594939Marshall Clow 22933afa9761c1c1f916161278a99284d50a594939Marshall Clowtemplate <class T> 23933afa9761c1c1f916161278a99284d50a594939Marshall Clowvoid test_is_not_move_constructible() 24933afa9761c1c1f916161278a99284d50a594939Marshall Clow{ 25933afa9761c1c1f916161278a99284d50a594939Marshall Clow static_assert(!std::is_move_constructible<T>::value, ""); 261468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant} 271468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant 281468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantclass Empty 291468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant{ 301468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant}; 311468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant 321468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantclass NotEmpty 331468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant{ 341468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantpublic: 351468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant virtual ~NotEmpty(); 361468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant}; 371468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant 381468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantunion Union {}; 391468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant 401468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantstruct bit_zero 411468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant{ 421468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant int : 0; 431468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant}; 441468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant 451468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantclass Abstract 461468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant{ 471468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantpublic: 481468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant virtual ~Abstract() = 0; 491468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant}; 501468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant 511468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantstruct A 521468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant{ 531468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant A(const A&); 541468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant}; 551468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant 561468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantstruct B 571468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant{ 58933afa9761c1c1f916161278a99284d50a594939Marshall Clow#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES 591468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant B(B&&); 60933afa9761c1c1f916161278a99284d50a594939Marshall Clow#endif 611468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant}; 621468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant 631468b668aa964beb1220e9b36162b092fb54952bHoward Hinnantint main() 641468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant{ 65933afa9761c1c1f916161278a99284d50a594939Marshall Clow test_is_not_move_constructible<char[3]>(); 66933afa9761c1c1f916161278a99284d50a594939Marshall Clow test_is_not_move_constructible<char[]>(); 67933afa9761c1c1f916161278a99284d50a594939Marshall Clow test_is_not_move_constructible<void>(); 68933afa9761c1c1f916161278a99284d50a594939Marshall Clow test_is_not_move_constructible<Abstract>(); 691468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant 70933afa9761c1c1f916161278a99284d50a594939Marshall Clow test_is_move_constructible<A>(); 71933afa9761c1c1f916161278a99284d50a594939Marshall Clow test_is_move_constructible<int&>(); 72933afa9761c1c1f916161278a99284d50a594939Marshall Clow test_is_move_constructible<Union>(); 73933afa9761c1c1f916161278a99284d50a594939Marshall Clow test_is_move_constructible<Empty>(); 74933afa9761c1c1f916161278a99284d50a594939Marshall Clow test_is_move_constructible<int>(); 75933afa9761c1c1f916161278a99284d50a594939Marshall Clow test_is_move_constructible<double>(); 76933afa9761c1c1f916161278a99284d50a594939Marshall Clow test_is_move_constructible<int*>(); 77933afa9761c1c1f916161278a99284d50a594939Marshall Clow test_is_move_constructible<const int*>(); 78933afa9761c1c1f916161278a99284d50a594939Marshall Clow test_is_move_constructible<NotEmpty>(); 79933afa9761c1c1f916161278a99284d50a594939Marshall Clow test_is_move_constructible<bit_zero>(); 80933afa9761c1c1f916161278a99284d50a594939Marshall Clow test_is_move_constructible<B>(); 811468b668aa964beb1220e9b36162b092fb54952bHoward Hinnant} 82