mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-20 11:29:24 +00:00
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2976 91177308-0d34-0410-b5e6-96231b3b80d8
109 lines
2.8 KiB
C++
109 lines
2.8 KiB
C++
// (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.
|
|
//
|
|
// See http://www.boost.org 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
|
|
|
|
#ifdef BOOST_MSVC
|
|
//
|
|
// 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
|
|
|
|
|
|
|