forked from boostorg/intrusive
@@ -70,11 +70,11 @@
|
|||||||
#error "BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END not defined!"
|
#error "BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END not defined!"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if BOOST_PP_ITERATION_START() != 0
|
#if BOOST_PP_ITERATION_START() > BOOST_PP_ITERATION_FINISH()
|
||||||
#error "BOOST_PP_ITERATION_START() must be zero (0)"
|
#error "BOOST_PP_ITERATION_START() must be <= BOOST_PP_ITERATION_FINISH()"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if BOOST_PP_ITERATION() == 0
|
#if BOOST_PP_ITERATION() == BOOST_PP_ITERATION_START()
|
||||||
|
|
||||||
BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN
|
BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN
|
||||||
|
|
||||||
@@ -114,6 +114,119 @@
|
|||||||
};
|
};
|
||||||
//!
|
//!
|
||||||
|
|
||||||
|
#else //!defined(BOOST_INTRUSIVE_PERFECT_FORWARDING)
|
||||||
|
|
||||||
|
template<typename Fun, bool HasFunc, class ...Args>
|
||||||
|
struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl);
|
||||||
|
|
||||||
|
template<typename Fun, class ...Args>
|
||||||
|
struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl)
|
||||||
|
<Fun, false, Args...>
|
||||||
|
{
|
||||||
|
static const bool value = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef BOOST_NO_CXX11_DECLTYPE
|
||||||
|
|
||||||
|
//Special case for 0 args
|
||||||
|
template< class F
|
||||||
|
, std::size_t N =
|
||||||
|
sizeof((boost::move_detail::declval<F>().
|
||||||
|
BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME (), 0))>
|
||||||
|
struct BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)
|
||||||
|
{
|
||||||
|
boost_intrusive_has_member_function_callable_with::yes_type dummy;
|
||||||
|
BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)(int);
|
||||||
|
};
|
||||||
|
|
||||||
|
//For buggy compilers like MSVC 7.1+ ((F*)0)->func() does not
|
||||||
|
//SFINAE-out the zeroarg_checker_ instantiation but sizeof yields to 0.
|
||||||
|
template<class F>
|
||||||
|
struct BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)<F, 0>
|
||||||
|
{
|
||||||
|
boost_intrusive_has_member_function_callable_with::no_type dummy;
|
||||||
|
BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)(int);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //#ifdef BOOST_NO_CXX11_DECLTYPE
|
||||||
|
|
||||||
|
template<typename Fun>
|
||||||
|
struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl)
|
||||||
|
<Fun, true>
|
||||||
|
{
|
||||||
|
#ifndef BOOST_NO_CXX11_DECLTYPE
|
||||||
|
template<class U, class V = decltype(boost::move_detail::declval<U>().BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME()) >
|
||||||
|
static boost_intrusive_has_member_function_callable_with::yes_type Test(U*);
|
||||||
|
#else
|
||||||
|
template<class U>
|
||||||
|
static BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)
|
||||||
|
<U> Test(BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)<U>*);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
template <class U>
|
||||||
|
static boost_intrusive_has_member_function_callable_with::no_type Test(...);
|
||||||
|
|
||||||
|
static const bool value = sizeof(Test< Fun >(0))
|
||||||
|
== sizeof(boost_intrusive_has_member_function_callable_with::yes_type);
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename Fun, class ...DontCares>
|
||||||
|
struct BOOST_PP_CAT( funwrap_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME )
|
||||||
|
: Fun
|
||||||
|
{
|
||||||
|
BOOST_PP_CAT( funwrap_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME )();
|
||||||
|
using Fun::BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME;
|
||||||
|
|
||||||
|
boost_intrusive_has_member_function_callable_with::private_type
|
||||||
|
BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME
|
||||||
|
( DontCares...) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename Fun, class ...Args>
|
||||||
|
struct BOOST_PP_CAT( BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME), _impl)
|
||||||
|
<Fun, true , Args...>
|
||||||
|
{
|
||||||
|
template<class T>
|
||||||
|
struct make_dontcare
|
||||||
|
{
|
||||||
|
typedef boost_intrusive_has_member_function_callable_with::dont_care type;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef BOOST_PP_CAT( funwrap_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME )
|
||||||
|
<Fun, typename make_dontcare<Args>::type...> FunWrap;
|
||||||
|
|
||||||
|
static bool const value = (sizeof(boost_intrusive_has_member_function_callable_with::no_type) ==
|
||||||
|
sizeof(boost_intrusive_has_member_function_callable_with::is_private_type
|
||||||
|
( (::boost::move_detail::declval< FunWrap >().
|
||||||
|
BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME
|
||||||
|
( ::boost::move_detail::declval<Args>()... ), 0) )
|
||||||
|
)
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename Fun, class ...Args>
|
||||||
|
struct BOOST_PP_CAT( has_member_function_callable_with_
|
||||||
|
, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)
|
||||||
|
: public BOOST_PP_CAT( BOOST_PP_CAT(has_member_function_callable_with_
|
||||||
|
, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl)
|
||||||
|
< Fun
|
||||||
|
, BOOST_PP_CAT( has_member_function_named_
|
||||||
|
, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME )<Fun>::value
|
||||||
|
, Args... >
|
||||||
|
{};
|
||||||
|
|
||||||
|
#endif //!defined(BOOST_INTRUSIVE_PERFECT_FORWARDING)
|
||||||
|
|
||||||
|
BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END
|
||||||
|
|
||||||
|
#endif //BOOST_PP_ITERATION() == BOOST_PP_ITERATION_START()
|
||||||
|
|
||||||
|
#if BOOST_PP_ITERATION() == 0
|
||||||
|
|
||||||
|
BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN
|
||||||
|
|
||||||
|
#if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING)
|
||||||
|
|
||||||
#if !defined(_MSC_VER) || (_MSC_VER < 1600)
|
#if !defined(_MSC_VER) || (_MSC_VER < 1600)
|
||||||
|
|
||||||
#if defined(BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_0_ARGS_UNSUPPORTED)
|
#if defined(BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_0_ARGS_UNSUPPORTED)
|
||||||
@@ -171,9 +284,9 @@
|
|||||||
<Fun, true BOOST_PP_ENUM_TRAILING(BOOST_PP_SUB(BOOST_PP_ITERATION_FINISH(), BOOST_PP_ITERATION()), BOOST_INTRUSIVE_PP_IDENTITY, void)>
|
<Fun, true BOOST_PP_ENUM_TRAILING(BOOST_PP_SUB(BOOST_PP_ITERATION_FINISH(), BOOST_PP_ITERATION()), BOOST_INTRUSIVE_PP_IDENTITY, void)>
|
||||||
{
|
{
|
||||||
template<class U>
|
template<class U>
|
||||||
static decltype( boost::move_detail::declval<Fun>().BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME()
|
static decltype( boost::move_detail::declval<U>().BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME()
|
||||||
, boost_intrusive_has_member_function_callable_with::yes_type())
|
, boost_intrusive_has_member_function_callable_with::yes_type())
|
||||||
Test(Fun*);
|
Test(U*);
|
||||||
|
|
||||||
template<class U>
|
template<class U>
|
||||||
static boost_intrusive_has_member_function_callable_with::no_type Test(...);
|
static boost_intrusive_has_member_function_callable_with::no_type Test(...);
|
||||||
@@ -185,105 +298,6 @@
|
|||||||
|
|
||||||
#else //#if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING)
|
#else //#if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING)
|
||||||
|
|
||||||
template<typename Fun, bool HasFunc, class ...Args>
|
|
||||||
struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl);
|
|
||||||
|
|
||||||
template<typename Fun, class ...Args>
|
|
||||||
struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl)
|
|
||||||
<Fun, false, Args...>
|
|
||||||
{
|
|
||||||
static const bool value = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifdef BOOST_NO_CXX11_DECLTYPE
|
|
||||||
|
|
||||||
//Special case for 0 args
|
|
||||||
template< class F
|
|
||||||
, std::size_t N =
|
|
||||||
sizeof((boost::move_detail::declval<F>().
|
|
||||||
BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME (), 0))>
|
|
||||||
struct BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)
|
|
||||||
{
|
|
||||||
boost_intrusive_has_member_function_callable_with::yes_type dummy;
|
|
||||||
BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)(int);
|
|
||||||
};
|
|
||||||
|
|
||||||
//For buggy compilers like MSVC 7.1+ ((F*)0)->func() does not
|
|
||||||
//SFINAE-out the zeroarg_checker_ instantiation but sizeof yields to 0.
|
|
||||||
template<class F>
|
|
||||||
struct BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)<F, 0>
|
|
||||||
{
|
|
||||||
boost_intrusive_has_member_function_callable_with::no_type dummy;
|
|
||||||
BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)(int);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif //#ifdef BOOST_NO_CXX11_DECLTYPE
|
|
||||||
|
|
||||||
template<typename Fun>
|
|
||||||
struct BOOST_PP_CAT(BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl)
|
|
||||||
<Fun, true>
|
|
||||||
{
|
|
||||||
#ifndef BOOST_NO_CXX11_DECLTYPE
|
|
||||||
template<class U, class V = decltype(boost::move_detail::declval<Fun>().BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME()) >
|
|
||||||
static boost_intrusive_has_member_function_callable_with::yes_type Test(Fun*);
|
|
||||||
#else
|
|
||||||
template<class U>
|
|
||||||
static BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)
|
|
||||||
<U> Test(BOOST_PP_CAT(zeroarg_checker_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)<U>*);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
template <class U>
|
|
||||||
static boost_intrusive_has_member_function_callable_with::no_type Test(...);
|
|
||||||
|
|
||||||
static const bool value = sizeof(Test< Fun >(0))
|
|
||||||
== sizeof(boost_intrusive_has_member_function_callable_with::yes_type);
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename Fun, class ...DontCares>
|
|
||||||
struct BOOST_PP_CAT( funwrap_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME )
|
|
||||||
: Fun
|
|
||||||
{
|
|
||||||
BOOST_PP_CAT( funwrap_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME )();
|
|
||||||
using Fun::BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME;
|
|
||||||
|
|
||||||
boost_intrusive_has_member_function_callable_with::private_type
|
|
||||||
BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME
|
|
||||||
( DontCares...) const;
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename Fun, class ...Args>
|
|
||||||
struct BOOST_PP_CAT( BOOST_PP_CAT(has_member_function_callable_with_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME), _impl)
|
|
||||||
<Fun, true , Args...>
|
|
||||||
{
|
|
||||||
template<class T>
|
|
||||||
struct make_dontcare
|
|
||||||
{
|
|
||||||
typedef boost_intrusive_has_member_function_callable_with::dont_care type;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef BOOST_PP_CAT( funwrap_, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME )
|
|
||||||
<Fun, typename make_dontcare<Args>::type...> FunWrap;
|
|
||||||
|
|
||||||
static bool const value = (sizeof(boost_intrusive_has_member_function_callable_with::no_type) ==
|
|
||||||
sizeof(boost_intrusive_has_member_function_callable_with::is_private_type
|
|
||||||
( (::boost::move_detail::declval< FunWrap >().
|
|
||||||
BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME
|
|
||||||
( ::boost::move_detail::declval<Args>()... ), 0) )
|
|
||||||
)
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
template<typename Fun, class ...Args>
|
|
||||||
struct BOOST_PP_CAT( has_member_function_callable_with_
|
|
||||||
, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME)
|
|
||||||
: public BOOST_PP_CAT( BOOST_PP_CAT(has_member_function_callable_with_
|
|
||||||
, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME),_impl)
|
|
||||||
< Fun
|
|
||||||
, BOOST_PP_CAT( has_member_function_named_
|
|
||||||
, BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME )<Fun>::value
|
|
||||||
, Args... >
|
|
||||||
{};
|
|
||||||
|
|
||||||
#endif //#if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING)
|
#endif //#if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING)
|
||||||
|
|
||||||
BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END
|
BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END
|
||||||
|
@@ -118,25 +118,25 @@ struct LowPriorityConversion
|
|||||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME pointer_to
|
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME pointer_to
|
||||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace intrusive { namespace detail {
|
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace intrusive { namespace detail {
|
||||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
|
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
|
||||||
#define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 1, <boost/intrusive/detail/has_member_function_callable_with.hpp>))
|
#define BOOST_PP_ITERATION_PARAMS_1 (3, (1, 1, <boost/intrusive/detail/has_member_function_callable_with.hpp>))
|
||||||
#include BOOST_PP_ITERATE()
|
#include BOOST_PP_ITERATE()
|
||||||
|
|
||||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME static_cast_from
|
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME static_cast_from
|
||||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace intrusive { namespace detail {
|
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace intrusive { namespace detail {
|
||||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
|
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
|
||||||
#define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 1, <boost/intrusive/detail/has_member_function_callable_with.hpp>))
|
#define BOOST_PP_ITERATION_PARAMS_1 (3, (1, 1, <boost/intrusive/detail/has_member_function_callable_with.hpp>))
|
||||||
#include BOOST_PP_ITERATE()
|
#include BOOST_PP_ITERATE()
|
||||||
|
|
||||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME const_cast_from
|
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME const_cast_from
|
||||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace intrusive { namespace detail {
|
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace intrusive { namespace detail {
|
||||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
|
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
|
||||||
#define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 1, <boost/intrusive/detail/has_member_function_callable_with.hpp>))
|
#define BOOST_PP_ITERATION_PARAMS_1 (3, (1, 1, <boost/intrusive/detail/has_member_function_callable_with.hpp>))
|
||||||
#include BOOST_PP_ITERATE()
|
#include BOOST_PP_ITERATE()
|
||||||
|
|
||||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME dynamic_cast_from
|
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME dynamic_cast_from
|
||||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace intrusive { namespace detail {
|
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEGIN namespace boost { namespace intrusive { namespace detail {
|
||||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
|
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
|
||||||
#define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 1, <boost/intrusive/detail/has_member_function_callable_with.hpp>))
|
#define BOOST_PP_ITERATION_PARAMS_1 (3, (1, 1, <boost/intrusive/detail/has_member_function_callable_with.hpp>))
|
||||||
#include BOOST_PP_ITERATE()
|
#include BOOST_PP_ITERATE()
|
||||||
|
|
||||||
namespace boost {
|
namespace boost {
|
||||||
|
@@ -15,6 +15,7 @@
|
|||||||
|
|
||||||
#include<boost/intrusive/detail/utilities.hpp>
|
#include<boost/intrusive/detail/utilities.hpp>
|
||||||
#include<boost/intrusive/detail/mpl.hpp>
|
#include<boost/intrusive/detail/mpl.hpp>
|
||||||
|
#include<boost/static_assert.hpp>
|
||||||
|
|
||||||
namespace boost {
|
namespace boost {
|
||||||
namespace intrusive {
|
namespace intrusive {
|
||||||
@@ -28,7 +29,7 @@ class delete_disposer
|
|||||||
void operator()(Pointer p)
|
void operator()(Pointer p)
|
||||||
{
|
{
|
||||||
typedef typename std::iterator_traits<Pointer>::value_type value_type;
|
typedef typename std::iterator_traits<Pointer>::value_type value_type;
|
||||||
BOOST_INTRUSIVE_INVARIANT_ASSERT(( detail::is_same<T, value_type>::value ));
|
BOOST_STATIC_ASSERT(( detail::is_same<T, value_type>::value ));
|
||||||
delete boost::intrusive::detail::to_raw_pointer(p);
|
delete boost::intrusive::detail::to_raw_pointer(p);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@@ -147,7 +147,7 @@ class has_member_function_named_func
|
|||||||
<Fun, true , void , void , void>
|
<Fun, true , void , void , void>
|
||||||
{
|
{
|
||||||
template<class U>
|
template<class U>
|
||||||
static decltype(boost::move_detail::declval<Fun>().func(), has_member_function_callable_with::yes_type()) Test(Fun* f);
|
static decltype(boost::move_detail::declval<U>().func(), has_member_function_callable_with::yes_type()) Test(U* f);
|
||||||
|
|
||||||
template<class U>
|
template<class U>
|
||||||
static has_member_function_callable_with::no_type Test(...);
|
static has_member_function_callable_with::no_type Test(...);
|
||||||
@@ -307,7 +307,7 @@ class has_member_function_named_func
|
|||||||
<Fun, true>
|
<Fun, true>
|
||||||
{
|
{
|
||||||
#ifndef BOOST_NO_CXX11_DECLTYPE
|
#ifndef BOOST_NO_CXX11_DECLTYPE
|
||||||
template<class U, class V = decltype(boost::move_detail::declval<Fun>().func()) >
|
template<class U, class V = decltype(boost::move_detail::declval<U>().func()) >
|
||||||
static boost_intrusive_has_member_function_callable_with::yes_type Test(U*);
|
static boost_intrusive_has_member_function_callable_with::yes_type Test(U*);
|
||||||
#else
|
#else
|
||||||
template<class U>
|
template<class U>
|
||||||
|
Reference in New Issue
Block a user