$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Kevin S. Van Horn (Kevin.VanHorn_at_[hidden])
Date: 2002-10-14 09:47:39
I've been looking over some of the type traits stuff, and I had a question
about the implementation of is_enum. Here is the code in question:
template <typename T> struct is_enum
{
private:
typedef ::boost::add_reference<T> ar_t;
typedef typename ar_t::type r_type;
BOOST_STATIC_CONSTANT(bool, selector =
(::boost::type_traits::ice_or<
::boost::is_arithmetic<T>::value
, ::boost::is_reference<T>::value
// We MUST do this on conforming compilers in order to
// correctly deduce that noncopyable types are not enums (dwa
// 2002/04/15)...
, ::boost::is_class<T>::value
>::value));
typedef ::boost::detail::is_enum_helper<selector> se_t;
typedef typename se_t::template type<r_type> helper;
public:
BOOST_STATIC_CONSTANT(bool, value = helper::value);
};
I'm quite mystified by the comment about ORing is_class<T>::value into
selector. How is the fact that a class C is noncopyable going to make
is_enum_helper<false>::type<r_type>::value true? I tried to look up the
mentioned message in the mailing list archives, and it didn't shed any
light.