// (C) Copyright Steve Cleary, Beman Dawes, Aleksey Gurtovoy, Howard Hinnant & John Maddock 2000.
-// Permission to copy, use, modify, sell and
-// distribute this software is granted provided this copyright notice appears
-// in all copies. This software is provided "as is" without express or implied
-// warranty, and with no claim as to its suitability for any purpose.
+// 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 for most recent version including documentation.
+// See http://www.boost.org/libs/type_traits for most recent version including documentation.
//
// defines is_same:
-// Revision History
-// 19 Feb 2001 Fixed for MSVC (David Abrahams)
-
-#ifndef BOOST_SAME_TRAITS_HPP
-#define BOOST_SAME_TRAITS_HPP
-
-#ifndef BOOST_ICE_TYPE_TRAITS_HPP
-#include <boost/type_traits/ice.hpp>
-#endif
-#ifndef BOOST_FWD_TYPE_TRAITS_HPP
-#include <boost/type_traits/fwd.hpp>
-#endif
-#if !defined(BOOST_COMPOSITE_TYPE_TRAITS_HPP) && defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_MSVC)
-#include <boost/type_traits/composite_traits.hpp>
-#endif
-
-namespace boost{
-
-/**********************************************
- *
- * is_same
- *
- **********************************************/
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
-template <typename T, typename U>
-struct is_same
-{ BOOST_STATIC_CONSTANT(bool, value = false); };
-
-template <typename T>
-struct is_same<T, T>
-{ BOOST_STATIC_CONSTANT(bool, value = true); };
-
-#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
-// A definition is required even for integral static constants
-template <typename T, typename U>
-const bool is_same<T, U>::value;
-
-template <typename T>
-const bool is_same<T, T>::value;
-#endif
-
-#else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
-#if defined(BOOST_MSVC) && BOOST_MSVC <= 1300
-//
-// the following VC6 specific implementation is *NOT* legal
-// C++, but has the advantage that it works for incomplete
-// types.
-//
-namespace detail{
-
-template<class T1>
-struct is_same_part_1 {
- template<class T2> struct part_2 { enum { value = false }; };
- template<> struct part_2<T1> { enum { value = true }; };
-};
-
-} // namespace detail
-
-template<class T1, class T2>
-struct is_same {
- enum { value = detail::is_same_part_1<T1>::template part_2<T2>::value };
-};
-
-#else // BOOST_MSVC
-
-namespace detail{
- template <class T>
- ::boost::type_traits::yes_type BOOST_TT_DECL is_same_helper(T*, T*);
- ::boost::type_traits::no_type BOOST_TT_DECL is_same_helper(...);
-}
-
-template <typename T, typename U>
-struct is_same
-{
-private:
- static T t;
- static U u;
-public:
- BOOST_STATIC_CONSTANT(bool, value =
- (::boost::type_traits::ice_and<
- (sizeof(type_traits::yes_type) == sizeof(detail::is_same_helper(&t,&u))),
- (::boost::is_reference<T>::value == ::boost::is_reference<U>::value),
- (sizeof(T) == sizeof(U))
- >::value));
-};
-
-#endif // BOOST_MSVC
-
-#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
-
-} // namespace boost
-
-#endif // BOOST_SAME_TRAITS_HPP
-
+#ifndef BOOST_TT_SAME_TRAITS_HPP_INCLUDED
+#define BOOST_TT_SAME_TRAITS_HPP_INCLUDED
+#include <boost/type_traits/is_same.hpp>
+#endif // BOOST_TT_SAME_TRAITS_HPP_INCLUDED