97
101
# define BOOST_IS_ABSTRACT(T) __is_abstract(T)
98
102
# define BOOST_IS_BASE_OF(T,U) (__is_base_of(T,U) && !is_same<T,U>::value)
99
103
# define BOOST_IS_CLASS(T) __is_class(T)
100
# define BOOST_IS_CONVERTIBLE(T,U) ((__is_convertible_to(T,U) || is_same<T,U>::value) && !__is_abstract(U))
104
# define BOOST_IS_CONVERTIBLE(T,U) ((__is_convertible_to(T,U) || (is_same<T,U>::value && !is_function<U>::value)) && !__is_abstract(U))
101
105
# define BOOST_IS_ENUM(T) __is_enum(T)
102
106
// This one doesn't quite always do the right thing:
103
107
// # define BOOST_IS_POLYMORPHIC(T) __is_polymorphic(T)
104
108
// This one fails if the default alignment has been changed with /Zp:
105
109
// # define BOOST_ALIGNMENT_OF(T) __alignof(T)
107
116
# define BOOST_HAS_TYPE_TRAITS_INTRINSICS