1305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot//===----------------------------------------------------------------------===// 2305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot// 3305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot// The LLVM Compiler Infrastructure 4305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot// 5305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot// This file is dual licensed under the MIT and the University of Illinois Open 6305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot// Source Licenses. See LICENSE.TXT for details. 7305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot// 8305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot//===----------------------------------------------------------------------===// 9305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot 10305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot// type_traits 11305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot 12305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot// enum 13305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot 14305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot#include <type_traits> 15305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot 16305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabottemplate <class T> 17305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabotvoid test_enum_imp() 18305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot{ 19305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot static_assert(!std::is_reference<T>::value, ""); 20305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot static_assert(!std::is_arithmetic<T>::value, ""); 21305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot static_assert(!std::is_fundamental<T>::value, ""); 22305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot static_assert( std::is_object<T>::value, ""); 23305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot static_assert( std::is_scalar<T>::value, ""); 24305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot static_assert( std::is_compound<T>::value, ""); 25305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot static_assert(!std::is_member_pointer<T>::value, ""); 26305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot} 27305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot 28305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabottemplate <class T> 29305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabotvoid test_enum() 30305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot{ 31305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot test_enum_imp<T>(); 32305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot test_enum_imp<const T>(); 33305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot test_enum_imp<volatile T>(); 34305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot test_enum_imp<const volatile T>(); 35305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot} 36305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot 37305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabotenum Enum {zero, one}; 38305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabot 39305258da757bc1dff447a27b1c7e510cb65191bbBrett Chabotint main() 40{ 41 test_enum<Enum>(); 42} 43