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