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 |