1ee226c05af9e0187098f43fb71465a581487af9bDan Austin//===----------------------------------------------------------------------===// 2ee226c05af9e0187098f43fb71465a581487af9bDan Austin// 3ee226c05af9e0187098f43fb71465a581487af9bDan Austin// The LLVM Compiler Infrastructure 4ee226c05af9e0187098f43fb71465a581487af9bDan Austin// 5ee226c05af9e0187098f43fb71465a581487af9bDan Austin// This file is dual licensed under the MIT and the University of Illinois Open 6ee226c05af9e0187098f43fb71465a581487af9bDan Austin// Source Licenses. See LICENSE.TXT for details. 7ee226c05af9e0187098f43fb71465a581487af9bDan Austin// 8ee226c05af9e0187098f43fb71465a581487af9bDan Austin//===----------------------------------------------------------------------===// 9ee226c05af9e0187098f43fb71465a581487af9bDan Austin 10ee226c05af9e0187098f43fb71465a581487af9bDan Austin// type_traits 11ee226c05af9e0187098f43fb71465a581487af9bDan Austin 12ee226c05af9e0187098f43fb71465a581487af9bDan Austin// is_rvalue_reference 13ee226c05af9e0187098f43fb71465a581487af9bDan Austin 14ee226c05af9e0187098f43fb71465a581487af9bDan Austin// UNSUPPORTED: c++98, c++03 15ee226c05af9e0187098f43fb71465a581487af9bDan Austin 16ee226c05af9e0187098f43fb71465a581487af9bDan Austin#include <type_traits> 17ee226c05af9e0187098f43fb71465a581487af9bDan Austin#include <cstddef> // for std::nullptr_t 18ee226c05af9e0187098f43fb71465a581487af9bDan Austin#include "test_macros.h" 19ee226c05af9e0187098f43fb71465a581487af9bDan Austin 20ee226c05af9e0187098f43fb71465a581487af9bDan Austintemplate <class T> 21ee226c05af9e0187098f43fb71465a581487af9bDan Austinvoid test_is_rvalue_reference() 22ee226c05af9e0187098f43fb71465a581487af9bDan Austin{ 23ee226c05af9e0187098f43fb71465a581487af9bDan Austin static_assert( std::is_rvalue_reference<T>::value, ""); 24ee226c05af9e0187098f43fb71465a581487af9bDan Austin static_assert( std::is_rvalue_reference<const T>::value, ""); 25ee226c05af9e0187098f43fb71465a581487af9bDan Austin static_assert( std::is_rvalue_reference<volatile T>::value, ""); 26ee226c05af9e0187098f43fb71465a581487af9bDan Austin static_assert( std::is_rvalue_reference<const volatile T>::value, ""); 27ee226c05af9e0187098f43fb71465a581487af9bDan Austin#if TEST_STD_VER > 14 28ee226c05af9e0187098f43fb71465a581487af9bDan Austin static_assert( std::is_rvalue_reference_v<T>, ""); 29ee226c05af9e0187098f43fb71465a581487af9bDan Austin static_assert( std::is_rvalue_reference_v<const T>, ""); 30ee226c05af9e0187098f43fb71465a581487af9bDan Austin static_assert( std::is_rvalue_reference_v<volatile T>, ""); 31ee226c05af9e0187098f43fb71465a581487af9bDan Austin static_assert( std::is_rvalue_reference_v<const volatile T>, ""); 32ee226c05af9e0187098f43fb71465a581487af9bDan Austin#endif 33ee226c05af9e0187098f43fb71465a581487af9bDan Austin} 34ee226c05af9e0187098f43fb71465a581487af9bDan Austin 35ee226c05af9e0187098f43fb71465a581487af9bDan Austintemplate <class T> 36ee226c05af9e0187098f43fb71465a581487af9bDan Austinvoid test_is_not_rvalue_reference() 37ee226c05af9e0187098f43fb71465a581487af9bDan Austin{ 38ee226c05af9e0187098f43fb71465a581487af9bDan Austin static_assert(!std::is_rvalue_reference<T>::value, ""); 39ee226c05af9e0187098f43fb71465a581487af9bDan Austin static_assert(!std::is_rvalue_reference<const T>::value, ""); 40ee226c05af9e0187098f43fb71465a581487af9bDan Austin static_assert(!std::is_rvalue_reference<volatile T>::value, ""); 41ee226c05af9e0187098f43fb71465a581487af9bDan Austin static_assert(!std::is_rvalue_reference<const volatile T>::value, ""); 42ee226c05af9e0187098f43fb71465a581487af9bDan Austin#if TEST_STD_VER > 14 43ee226c05af9e0187098f43fb71465a581487af9bDan Austin static_assert(!std::is_rvalue_reference_v<T>, ""); 44ee226c05af9e0187098f43fb71465a581487af9bDan Austin static_assert(!std::is_rvalue_reference_v<const T>, ""); 45ee226c05af9e0187098f43fb71465a581487af9bDan Austin static_assert(!std::is_rvalue_reference_v<volatile T>, ""); 46ee226c05af9e0187098f43fb71465a581487af9bDan Austin static_assert(!std::is_rvalue_reference_v<const volatile T>, ""); 47ee226c05af9e0187098f43fb71465a581487af9bDan Austin#endif 48ee226c05af9e0187098f43fb71465a581487af9bDan Austin} 49ee226c05af9e0187098f43fb71465a581487af9bDan Austin 50ee226c05af9e0187098f43fb71465a581487af9bDan Austinclass Empty 51ee226c05af9e0187098f43fb71465a581487af9bDan Austin{ 52ee226c05af9e0187098f43fb71465a581487af9bDan Austin}; 53ee226c05af9e0187098f43fb71465a581487af9bDan Austin 54ee226c05af9e0187098f43fb71465a581487af9bDan Austinclass NotEmpty 55ee226c05af9e0187098f43fb71465a581487af9bDan Austin{ 56ee226c05af9e0187098f43fb71465a581487af9bDan Austin virtual ~NotEmpty(); 57ee226c05af9e0187098f43fb71465a581487af9bDan Austin}; 58ee226c05af9e0187098f43fb71465a581487af9bDan Austin 59ee226c05af9e0187098f43fb71465a581487af9bDan Austinunion Union {}; 60ee226c05af9e0187098f43fb71465a581487af9bDan Austin 61ee226c05af9e0187098f43fb71465a581487af9bDan Austinstruct bit_zero 62ee226c05af9e0187098f43fb71465a581487af9bDan Austin{ 63ee226c05af9e0187098f43fb71465a581487af9bDan Austin int : 0; 64ee226c05af9e0187098f43fb71465a581487af9bDan Austin}; 65ee226c05af9e0187098f43fb71465a581487af9bDan Austin 66ee226c05af9e0187098f43fb71465a581487af9bDan Austinclass Abstract 67ee226c05af9e0187098f43fb71465a581487af9bDan Austin{ 68ee226c05af9e0187098f43fb71465a581487af9bDan Austin virtual ~Abstract() = 0; 69ee226c05af9e0187098f43fb71465a581487af9bDan Austin}; 70ee226c05af9e0187098f43fb71465a581487af9bDan Austin 71ee226c05af9e0187098f43fb71465a581487af9bDan Austinenum Enum {zero, one}; 72ee226c05af9e0187098f43fb71465a581487af9bDan Austinstruct incomplete_type; 73ee226c05af9e0187098f43fb71465a581487af9bDan Austin 74ee226c05af9e0187098f43fb71465a581487af9bDan Austintypedef void (*FunctionPtr)(); 75ee226c05af9e0187098f43fb71465a581487af9bDan Austin 76ee226c05af9e0187098f43fb71465a581487af9bDan Austinint main() 77ee226c05af9e0187098f43fb71465a581487af9bDan Austin{ 78ee226c05af9e0187098f43fb71465a581487af9bDan Austin test_is_rvalue_reference<int&&>(); 79ee226c05af9e0187098f43fb71465a581487af9bDan Austin 80ee226c05af9e0187098f43fb71465a581487af9bDan Austin test_is_not_rvalue_reference<std::nullptr_t>(); 81ee226c05af9e0187098f43fb71465a581487af9bDan Austin test_is_not_rvalue_reference<void>(); 82ee226c05af9e0187098f43fb71465a581487af9bDan Austin test_is_not_rvalue_reference<int>(); 83ee226c05af9e0187098f43fb71465a581487af9bDan Austin test_is_not_rvalue_reference<int*>(); 84ee226c05af9e0187098f43fb71465a581487af9bDan Austin test_is_not_rvalue_reference<int&>(); 85ee226c05af9e0187098f43fb71465a581487af9bDan Austin test_is_not_rvalue_reference<double>(); 86ee226c05af9e0187098f43fb71465a581487af9bDan Austin test_is_not_rvalue_reference<const int*>(); 87ee226c05af9e0187098f43fb71465a581487af9bDan Austin test_is_not_rvalue_reference<char[3]>(); 88ee226c05af9e0187098f43fb71465a581487af9bDan Austin test_is_not_rvalue_reference<char[]>(); 89ee226c05af9e0187098f43fb71465a581487af9bDan Austin test_is_not_rvalue_reference<Union>(); 90ee226c05af9e0187098f43fb71465a581487af9bDan Austin test_is_not_rvalue_reference<Enum>(); 91ee226c05af9e0187098f43fb71465a581487af9bDan Austin test_is_not_rvalue_reference<FunctionPtr>(); 92ee226c05af9e0187098f43fb71465a581487af9bDan Austin test_is_not_rvalue_reference<Empty>(); 93ee226c05af9e0187098f43fb71465a581487af9bDan Austin test_is_not_rvalue_reference<bit_zero>(); 94ee226c05af9e0187098f43fb71465a581487af9bDan Austin test_is_not_rvalue_reference<NotEmpty>(); 95ee226c05af9e0187098f43fb71465a581487af9bDan Austin test_is_not_rvalue_reference<Abstract>(); 96ee226c05af9e0187098f43fb71465a581487af9bDan Austin test_is_not_rvalue_reference<incomplete_type>(); 97ee226c05af9e0187098f43fb71465a581487af9bDan Austin} 98