| Index: third_party/boost/boost/type_traits/is_class.hpp
|
| diff --git a/third_party/boost/boost/type_traits/is_class.hpp b/third_party/boost/boost/type_traits/is_class.hpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..63a0c6a5fb214ac008bae1ef7d729653f468a477
|
| --- /dev/null
|
| +++ b/third_party/boost/boost/type_traits/is_class.hpp
|
| @@ -0,0 +1,139 @@
|
| +// (C) Copyright Dave Abrahams, Steve Cleary, Beman Dawes, Howard
|
| +// Hinnant & John Maddock 2000-2003.
|
| +// Use, modification and distribution are subject to the Boost Software License,
|
| +// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
| +// http://www.boost.org/LICENSE_1_0.txt).
|
| +//
|
| +// See http://www.boost.org/libs/type_traits for most recent version including documentation.
|
| +
|
| +
|
| +#ifndef BOOST_TT_IS_CLASS_HPP_INCLUDED
|
| +#define BOOST_TT_IS_CLASS_HPP_INCLUDED
|
| +
|
| +#include <boost/type_traits/config.hpp>
|
| +#include <boost/type_traits/intrinsics.hpp>
|
| +#ifndef BOOST_IS_CLASS
|
| +# include <boost/type_traits/is_union.hpp>
|
| +# include <boost/type_traits/detail/ice_and.hpp>
|
| +# include <boost/type_traits/detail/ice_not.hpp>
|
| +
|
| +#ifdef BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION
|
| +# include <boost/type_traits/detail/yes_no_type.hpp>
|
| +#else
|
| +# include <boost/type_traits/is_scalar.hpp>
|
| +# include <boost/type_traits/is_array.hpp>
|
| +# include <boost/type_traits/is_reference.hpp>
|
| +# include <boost/type_traits/is_void.hpp>
|
| +# include <boost/type_traits/is_function.hpp>
|
| +#endif
|
| +
|
| +#ifdef __EDG_VERSION__
|
| +# include <boost/type_traits/remove_cv.hpp>
|
| +#endif
|
| +#endif // BOOST_IS_CLASS
|
| +
|
| +// should be the last #include
|
| +#include <boost/type_traits/detail/bool_trait_def.hpp>
|
| +
|
| +namespace boost {
|
| +
|
| +namespace detail {
|
| +
|
| +#ifndef BOOST_IS_CLASS
|
| +#ifdef BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION
|
| +
|
| +// This is actually the conforming implementation which works with
|
| +// abstract classes. However, enough compilers have trouble with
|
| +// it that most will use the one in
|
| +// boost/type_traits/object_traits.hpp. This implementation
|
| +// actually works with VC7.0, but other interactions seem to fail
|
| +// when we use it.
|
| +
|
| +// is_class<> metafunction due to Paul Mensonides
|
| +// (leavings@attbi.com). For more details:
|
| +// http://groups.google.com/groups?hl=en&selm=000001c1cc83%24e154d5e0%247772e50c%40c161550a&rnum=1
|
| +#if defined(__GNUC__) && !defined(__EDG_VERSION__)
|
| +
|
| +template <class U> ::boost::type_traits::yes_type is_class_tester(void(U::*)(void));
|
| +template <class U> ::boost::type_traits::no_type is_class_tester(...);
|
| +
|
| +template <typename T>
|
| +struct is_class_impl
|
| +{
|
| +
|
| + BOOST_STATIC_CONSTANT(bool, value =
|
| + (::boost::type_traits::ice_and<
|
| + sizeof(is_class_tester<T>(0)) == sizeof(::boost::type_traits::yes_type),
|
| + ::boost::type_traits::ice_not< ::boost::is_union<T>::value >::value
|
| + >::value)
|
| + );
|
| +};
|
| +
|
| +#else
|
| +
|
| +template <typename T>
|
| +struct is_class_impl
|
| +{
|
| + template <class U> static ::boost::type_traits::yes_type is_class_tester(void(U::*)(void));
|
| + template <class U> static ::boost::type_traits::no_type is_class_tester(...);
|
| +
|
| + BOOST_STATIC_CONSTANT(bool, value =
|
| + (::boost::type_traits::ice_and<
|
| + sizeof(is_class_tester<T>(0)) == sizeof(::boost::type_traits::yes_type),
|
| + ::boost::type_traits::ice_not< ::boost::is_union<T>::value >::value
|
| + >::value)
|
| + );
|
| +};
|
| +
|
| +#endif
|
| +
|
| +#else
|
| +
|
| +template <typename T>
|
| +struct is_class_impl
|
| +{
|
| +# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
| + BOOST_STATIC_CONSTANT(bool, value =
|
| + (::boost::type_traits::ice_and<
|
| + ::boost::type_traits::ice_not< ::boost::is_union<T>::value >::value,
|
| + ::boost::type_traits::ice_not< ::boost::is_scalar<T>::value >::value,
|
| + ::boost::type_traits::ice_not< ::boost::is_array<T>::value >::value,
|
| + ::boost::type_traits::ice_not< ::boost::is_reference<T>::value>::value,
|
| + ::boost::type_traits::ice_not< ::boost::is_void<T>::value >::value,
|
| + ::boost::type_traits::ice_not< ::boost::is_function<T>::value >::value
|
| + >::value));
|
| +# else
|
| + BOOST_STATIC_CONSTANT(bool, value =
|
| + (::boost::type_traits::ice_and<
|
| + ::boost::type_traits::ice_not< ::boost::is_union<T>::value >::value,
|
| + ::boost::type_traits::ice_not< ::boost::is_scalar<T>::value >::value,
|
| + ::boost::type_traits::ice_not< ::boost::is_array<T>::value >::value,
|
| + ::boost::type_traits::ice_not< ::boost::is_reference<T>::value>::value,
|
| + ::boost::type_traits::ice_not< ::boost::is_void<T>::value >::value
|
| + >::value));
|
| +# endif
|
| +};
|
| +
|
| +# endif // BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION
|
| +# else // BOOST_IS_CLASS
|
| +template <typename T>
|
| +struct is_class_impl
|
| +{
|
| + BOOST_STATIC_CONSTANT(bool, value = BOOST_IS_CLASS(T));
|
| +};
|
| +# endif // BOOST_IS_CLASS
|
| +
|
| +} // namespace detail
|
| +
|
| +# ifdef __EDG_VERSION__
|
| +BOOST_TT_AUX_BOOL_TRAIT_DEF1(
|
| + is_class,T, boost::detail::is_class_impl<typename boost::remove_cv<T>::type>::value)
|
| +# else
|
| +BOOST_TT_AUX_BOOL_TRAIT_DEF1(is_class,T,::boost::detail::is_class_impl<T>::value)
|
| +# endif
|
| +
|
| +} // namespace boost
|
| +
|
| +#include <boost/type_traits/detail/bool_trait_undef.hpp>
|
| +
|
| +#endif // BOOST_TT_IS_CLASS_HPP_INCLUDED
|
|
|