mirror of
https://github.com/boostorg/intrusive.git
synced 2025-08-02 05:54:38 +02:00
Refactored test to directly use the new header without preprocessor dependencies.
This commit is contained in:
@@ -1,370 +1,75 @@
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gaztanaga 2011-2013. Distributed under the Boost
|
||||
// (C) Copyright Ion Gaztanaga 2011-2014. Distributed under 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/intrusive for documentation.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//Just for BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_0_ARGS_UNSUPPORTED
|
||||
//User define
|
||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME func0to3
|
||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN 0
|
||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX 3
|
||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace func0to3ns {
|
||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }
|
||||
#include <boost/intrusive/detail/has_member_function_callable_with.hpp>
|
||||
#include <cstddef>
|
||||
#include <boost/move/utility_core.hpp>
|
||||
|
||||
namespace boost{
|
||||
namespace intrusive{
|
||||
namespace intrusive_detail{
|
||||
namespace has_member_function_callable_with {
|
||||
|
||||
struct dont_care
|
||||
{
|
||||
dont_care(...);
|
||||
};
|
||||
|
||||
template<class T>
|
||||
struct make_dontcare
|
||||
{
|
||||
typedef has_member_function_callable_with::dont_care type;
|
||||
};
|
||||
|
||||
struct private_type
|
||||
{
|
||||
static private_type p;
|
||||
private_type const &operator,(int) const;
|
||||
};
|
||||
|
||||
typedef char yes_type;
|
||||
struct no_type{ char dummy[2]; };
|
||||
|
||||
template<typename T>
|
||||
no_type is_private_type(T const &);
|
||||
yes_type is_private_type(private_type const &);
|
||||
|
||||
}}}}
|
||||
|
||||
|
||||
namespace boost{
|
||||
namespace intrusive{
|
||||
namespace intrusive_detail{
|
||||
|
||||
template <typename Type>
|
||||
class has_member_function_named_func
|
||||
{
|
||||
struct BaseMixin
|
||||
{
|
||||
void func();
|
||||
};
|
||||
|
||||
struct Base : public ::boost::intrusive::detail::remove_cv<Type>::type, public BaseMixin {};
|
||||
template <typename T, T t> class Helper{};
|
||||
|
||||
template <typename U>
|
||||
static has_member_function_callable_with::no_type deduce
|
||||
(U*, Helper<void (BaseMixin::*)(), &U::func>* = 0);
|
||||
static has_member_function_callable_with::yes_type deduce(...);
|
||||
|
||||
public:
|
||||
static const bool value =
|
||||
sizeof(has_member_function_callable_with::yes_type) == sizeof(deduce((Base*)(0)));
|
||||
};
|
||||
|
||||
}}}
|
||||
|
||||
#if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING)
|
||||
|
||||
namespace boost{
|
||||
namespace intrusive{
|
||||
namespace intrusive_detail{
|
||||
|
||||
template<typename Fun, bool HasFunc
|
||||
, class P0 = void , class P1 = void , class P2 = void>
|
||||
struct has_member_function_callable_with_func_impl;
|
||||
|
||||
|
||||
template<typename Fun , class P0 , class P1 , class P2>
|
||||
struct has_member_function_callable_with_func_impl
|
||||
<Fun, false , P0 , P1 , P2>
|
||||
{
|
||||
static const bool value = false;
|
||||
};
|
||||
|
||||
|
||||
}}}
|
||||
|
||||
|
||||
namespace boost{
|
||||
namespace intrusive{
|
||||
namespace intrusive_detail{
|
||||
|
||||
#if !defined(_MSC_VER) || (_MSC_VER < 1600)
|
||||
|
||||
#if !defined(BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_0_ARGS_UNSUPPORTED)
|
||||
|
||||
template<class F, std::size_t N = sizeof(boost::move_detail::declval<F>().func(), 0)>
|
||||
struct zeroarg_checker_func
|
||||
{
|
||||
has_member_function_callable_with::yes_type dummy;
|
||||
zeroarg_checker_func(int);
|
||||
};
|
||||
|
||||
//For buggy compilers like MSVC 7.1, ((F*)0)->func() does not
|
||||
//fail but sizeof yields to 0.
|
||||
template<class F>
|
||||
struct zeroarg_checker_func<F, 0>
|
||||
{
|
||||
has_member_function_callable_with::no_type dummy;
|
||||
zeroarg_checker_func(int);
|
||||
};
|
||||
|
||||
template<typename Fun>
|
||||
struct has_member_function_callable_with_func_impl
|
||||
<Fun, true , void , void , void>
|
||||
{
|
||||
template<class U>
|
||||
static zeroarg_checker_func<U> Test(zeroarg_checker_func<U>*);
|
||||
|
||||
template <class U>
|
||||
static has_member_function_callable_with::no_type Test(...);
|
||||
|
||||
static const bool value
|
||||
= sizeof(Test< Fun >(0)) == sizeof(has_member_function_callable_with::yes_type);
|
||||
};
|
||||
|
||||
#else
|
||||
|
||||
template<typename Fun>
|
||||
struct has_member_function_callable_with_func_impl
|
||||
<Fun, true , void , void , void>
|
||||
{
|
||||
//GCC [3.4-4.3) gives ICE when instantiating the 0 arg version so it is not supported.
|
||||
static const bool value = true;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#else
|
||||
|
||||
template<typename Fun>
|
||||
struct has_member_function_callable_with_func_impl
|
||||
<Fun, true , void , void , void>
|
||||
{
|
||||
template<class U>
|
||||
static decltype(boost::move_detail::declval<U>().func(), has_member_function_callable_with::yes_type()) Test(U* f);
|
||||
|
||||
template<class U>
|
||||
static has_member_function_callable_with::no_type Test(...);
|
||||
static const bool value = sizeof(Test<Fun>((Fun*)0)) == sizeof(has_member_function_callable_with::yes_type);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
}}}
|
||||
|
||||
|
||||
namespace boost{
|
||||
namespace intrusive{
|
||||
namespace intrusive_detail{
|
||||
|
||||
template<typename Fun , class P0>
|
||||
struct has_member_function_callable_with_func_impl
|
||||
<Fun, true , P0 , void , void>
|
||||
{
|
||||
|
||||
struct FunWrap : Fun
|
||||
{
|
||||
using Fun::func;
|
||||
has_member_function_callable_with::private_type
|
||||
func( has_member_function_callable_with::dont_care) const;
|
||||
};
|
||||
|
||||
static bool const value = (sizeof(has_member_function_callable_with::no_type) ==
|
||||
sizeof(has_member_function_callable_with::is_private_type
|
||||
( (::boost::move_detail::declval< FunWrap >().func( ::boost::move_detail::declval<P0>() ), 0) )
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
}}}
|
||||
|
||||
namespace boost{
|
||||
namespace intrusive{
|
||||
namespace intrusive_detail{
|
||||
|
||||
template<typename Fun , class P0 , class P1>
|
||||
struct has_member_function_callable_with_func_impl
|
||||
<Fun, true , P0 , P1 , void>
|
||||
{
|
||||
struct FunWrap: Fun
|
||||
{
|
||||
using Fun::func;
|
||||
has_member_function_callable_with::private_type
|
||||
func( has_member_function_callable_with::dont_care , has_member_function_callable_with::dont_care) const;
|
||||
};
|
||||
|
||||
static bool const value = (sizeof(has_member_function_callable_with::no_type) ==
|
||||
sizeof(has_member_function_callable_with::is_private_type
|
||||
( (::boost::move_detail::declval< FunWrap >().
|
||||
func( ::boost::move_detail::declval<P0>()
|
||||
, ::boost::move_detail::declval<P1>() )
|
||||
, 0) )
|
||||
)
|
||||
);
|
||||
};
|
||||
}}}
|
||||
|
||||
namespace boost{
|
||||
namespace intrusive{
|
||||
namespace intrusive_detail{
|
||||
|
||||
template<typename Fun , class P0 , class P1 , class P2>
|
||||
struct has_member_function_callable_with_func_impl
|
||||
<Fun, true , P0 , P1 , P2 >
|
||||
{
|
||||
struct FunWrap: Fun
|
||||
{
|
||||
using Fun::func;
|
||||
has_member_function_callable_with::private_type
|
||||
func( has_member_function_callable_with::dont_care
|
||||
, has_member_function_callable_with::dont_care
|
||||
, has_member_function_callable_with::dont_care) const;
|
||||
};
|
||||
|
||||
static bool const value = (sizeof(has_member_function_callable_with::no_type) ==
|
||||
sizeof(has_member_function_callable_with::is_private_type
|
||||
( (::boost::move_detail::declval< FunWrap >().
|
||||
func( ::boost::move_detail::declval<P0>()
|
||||
, ::boost::move_detail::declval<P1>()
|
||||
, ::boost::move_detail::declval<P2>() )
|
||||
, 0) )
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
template<typename Fun
|
||||
, class P0 = void , class P1 = void, typename P2 = void>
|
||||
struct has_member_function_callable_with_func
|
||||
: public has_member_function_callable_with_func_impl
|
||||
<Fun, has_member_function_named_func<Fun>::value, P0 , P1 , P2 >
|
||||
{};
|
||||
|
||||
}}}
|
||||
|
||||
#else //#if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING)
|
||||
|
||||
namespace boost{
|
||||
namespace intrusive{
|
||||
namespace intrusive_detail{
|
||||
|
||||
template<typename Fun, bool HasFunc, class ...Args>
|
||||
struct has_member_function_callable_with_func_impl;
|
||||
|
||||
template<typename Fun, class ...Args>
|
||||
struct has_member_function_callable_with_func_impl
|
||||
<Fun, false, Args...>
|
||||
{
|
||||
static const bool value = false;
|
||||
};
|
||||
|
||||
|
||||
}}}
|
||||
|
||||
|
||||
namespace boost{
|
||||
namespace intrusive{
|
||||
namespace intrusive_detail{
|
||||
|
||||
#ifdef BOOST_NO_CXX11_DECLTYPE
|
||||
template<class F, std::size_t N = sizeof(boost::move_detail::declval<F>().func(), 0)>
|
||||
struct zeroarg_checker_func
|
||||
{
|
||||
has_member_function_callable_with::yes_type dummy;
|
||||
zeroarg_checker_func(int);
|
||||
};
|
||||
|
||||
//For buggy compilers like MSVC 7.1, ((F*)0)->func() does not
|
||||
//fail but sizeof yields to 0.
|
||||
template<class F>
|
||||
struct zeroarg_checker_func<F, 0>
|
||||
{
|
||||
has_member_function_callable_with::no_type dummy;
|
||||
zeroarg_checker_func(int);
|
||||
};
|
||||
|
||||
#endif //BOOST_NO_CXX11_DECLTYPE
|
||||
|
||||
template<typename Fun>
|
||||
struct has_member_function_callable_with_func_impl
|
||||
<Fun, true>
|
||||
{
|
||||
#ifndef BOOST_NO_CXX11_DECLTYPE
|
||||
template<class U, class V = decltype(boost::move_detail::declval<U>().func()) >
|
||||
static boost_intrusive_has_member_function_callable_with::yes_type Test(U*);
|
||||
#else
|
||||
template<class U>
|
||||
static zeroarg_checker_func<U> Test(zeroarg_checker_func<U>*);
|
||||
#endif
|
||||
|
||||
template <class U>
|
||||
static has_member_function_callable_with::no_type Test(...);
|
||||
|
||||
static const bool value = sizeof(Test< Fun >(0))
|
||||
== sizeof(has_member_function_callable_with::yes_type);
|
||||
};
|
||||
|
||||
}}}
|
||||
|
||||
|
||||
namespace boost{
|
||||
namespace intrusive{
|
||||
namespace intrusive_detail{
|
||||
|
||||
template<typename Fun, class ...Args>
|
||||
struct has_member_function_callable_with_func_impl
|
||||
<Fun, true , Args...>
|
||||
{
|
||||
template<class ...DontCares>
|
||||
struct FunWrapTmpl : Fun
|
||||
{
|
||||
using Fun::func;
|
||||
has_member_function_callable_with::private_type
|
||||
func(DontCares...) const;
|
||||
};
|
||||
|
||||
typedef FunWrapTmpl<typename has_member_function_callable_with::make_dontcare<Args>::type...> FunWrap;
|
||||
|
||||
static bool const value = (sizeof(has_member_function_callable_with::no_type) ==
|
||||
sizeof(has_member_function_callable_with::is_private_type
|
||||
( (::boost::move_detail::declval< FunWrap >().func( ::boost::move_detail::declval<Args>()... ), 0) )
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
template<typename Fun, class ...Args>
|
||||
struct has_member_function_callable_with_func
|
||||
: public has_member_function_callable_with_func_impl
|
||||
<Fun, has_member_function_named_func<Fun>::value, Args... >
|
||||
{};
|
||||
|
||||
}}}
|
||||
|
||||
#endif //#if !defined(BOOST_INTRUSIVE_PERFECT_FORWARDING)
|
||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME func1to2
|
||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN 1
|
||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX 2
|
||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace func1to2ns {
|
||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }
|
||||
#include <boost/intrusive/detail/has_member_function_callable_with.hpp>
|
||||
|
||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME func3to3
|
||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN 3
|
||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX 3
|
||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace func3to3ns {
|
||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }
|
||||
#include <boost/intrusive/detail/has_member_function_callable_with.hpp>
|
||||
|
||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME func0to0
|
||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN 0
|
||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX 0
|
||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace func0to0ns {
|
||||
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }
|
||||
#include <boost/intrusive/detail/has_member_function_callable_with.hpp>
|
||||
|
||||
///////////////////
|
||||
///////////////////
|
||||
// TEST CODE
|
||||
///////////////////
|
||||
///////////////////
|
||||
|
||||
struct functor
|
||||
{
|
||||
void func();
|
||||
void func(const int&);
|
||||
void func(const int&, const int&);
|
||||
void func(const int&, const int&, const int&);
|
||||
//func0to3
|
||||
void func0to3();
|
||||
void func0to3(const int&);
|
||||
void func0to3(const int&, const int&);
|
||||
void func0to3(const int&, const int&, const int&);
|
||||
//func1to2
|
||||
void func1to2(const int&);
|
||||
void func1to2(const int&, const int&);
|
||||
//func3to3
|
||||
void func3to3(const int&, const int&, const int&);
|
||||
//func0to0
|
||||
void func0to0();
|
||||
};
|
||||
|
||||
struct functor2
|
||||
{
|
||||
void func(char*);
|
||||
void func(int, char*);
|
||||
void func(int, char*, double);
|
||||
void func(const int&, char*, void *);
|
||||
void func0to3(char*);
|
||||
void func0to3(int, char*);
|
||||
void func0to3(int, char*, double);
|
||||
void func0to3(const int&, char*, void *);
|
||||
//func1to2
|
||||
void func1to2(char*);
|
||||
void func1to2(int, char*);
|
||||
void func1to2(int, char*, double);
|
||||
//func3to3
|
||||
void func3to3(const int&, char*, void *);
|
||||
};
|
||||
|
||||
struct functor3
|
||||
@@ -374,43 +79,55 @@ struct functor3
|
||||
|
||||
struct functor4
|
||||
{
|
||||
void func(...);
|
||||
template<class T>
|
||||
void func(int, const T &);
|
||||
|
||||
template<class T>
|
||||
void func(const T &);
|
||||
|
||||
template<class T, class U>
|
||||
void func(int, const T &, const U &);
|
||||
//func0to3
|
||||
void func0to3(...);
|
||||
template<class T> void func0to3(int, const T &);
|
||||
template<class T> void func0to3(const T &);
|
||||
template<class T, class U> void func0to3(int, const T &, const U &);
|
||||
//func1to2
|
||||
template<class T> void func1to2(int, const T &);
|
||||
template<class T> void func1to2(const T &);
|
||||
template<class T, class U> void func1to2(int, const T &, const U &);
|
||||
//func3to3
|
||||
void func3to3(...);
|
||||
template<class T, class U> void func3to3(int, const T &, const U &);
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
using namespace boost::intrusive::intrusive_detail;
|
||||
|
||||
#if !defined(BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_0_ARGS_UNSUPPORTED)
|
||||
{
|
||||
int check1[ has_member_function_callable_with_func<functor>::value ? 1 : -1];
|
||||
int check2[!has_member_function_callable_with_func<functor2>::value ? 1 : -1];
|
||||
int check3[!has_member_function_callable_with_func<functor3>::value ? 1 : -1];
|
||||
int check4[ has_member_function_callable_with_func<functor4>::value ? 1 : -1];
|
||||
{ //func0to3 0 arg
|
||||
using func0to3ns::has_member_function_callable_with_func0to3;
|
||||
int check1[ has_member_function_callable_with_func0to3<functor>::value ? 1 : -1];
|
||||
int check2[!has_member_function_callable_with_func0to3<functor2>::value ? 1 : -1];
|
||||
int check3[!has_member_function_callable_with_func0to3<functor3>::value ? 1 : -1];
|
||||
int check4[ has_member_function_callable_with_func0to3<functor4>::value ? 1 : -1];
|
||||
(void)check1;
|
||||
(void)check2;
|
||||
(void)check3;
|
||||
(void)check4;
|
||||
}
|
||||
{ //func0to0 0 arg
|
||||
using func0to0ns::has_member_function_callable_with_func0to0;
|
||||
int check1[ has_member_function_callable_with_func0to0<functor>::value ? 1 : -1];
|
||||
int check2[!has_member_function_callable_with_func0to0<functor2>::value ? 1 : -1];
|
||||
int check3[!has_member_function_callable_with_func0to0<functor3>::value ? 1 : -1];
|
||||
(void)check1;
|
||||
(void)check2;
|
||||
(void)check3;
|
||||
}
|
||||
#endif
|
||||
|
||||
{
|
||||
int check1[ has_member_function_callable_with_func<functor, int>::value ? 1 : -1];
|
||||
int check2[!has_member_function_callable_with_func<functor, char*>::value ? 1 : -1];
|
||||
int check3[!has_member_function_callable_with_func<functor2, int>::value ? 1 : -1];
|
||||
int check4[ has_member_function_callable_with_func<functor2, char*>::value ? 1 : -1];
|
||||
int check5[!has_member_function_callable_with_func<functor3, int>::value ? 1 : -1];
|
||||
int check6[!has_member_function_callable_with_func<functor3, char*>::value ? 1 : -1];
|
||||
int check7[ has_member_function_callable_with_func<functor4, int>::value ? 1 : -1];
|
||||
int check8[ has_member_function_callable_with_func<functor4, char*>::value ? 1 : -1];
|
||||
{ //func0to3 1arg
|
||||
using func0to3ns::has_member_function_callable_with_func0to3;
|
||||
int check1[ has_member_function_callable_with_func0to3<functor, int>::value ? 1 : -1];
|
||||
int check2[!has_member_function_callable_with_func0to3<functor, char*>::value ? 1 : -1];
|
||||
int check3[!has_member_function_callable_with_func0to3<functor2, int>::value ? 1 : -1];
|
||||
int check4[ has_member_function_callable_with_func0to3<functor2, char*>::value ? 1 : -1];
|
||||
int check5[!has_member_function_callable_with_func0to3<functor3, int>::value ? 1 : -1];
|
||||
int check6[!has_member_function_callable_with_func0to3<functor3, char*>::value ? 1 : -1];
|
||||
int check7[ has_member_function_callable_with_func0to3<functor4, int>::value ? 1 : -1];
|
||||
int check8[ has_member_function_callable_with_func0to3<functor4, char*>::value ? 1 : -1];
|
||||
(void)check1;
|
||||
(void)check2;
|
||||
(void)check3;
|
||||
@@ -421,14 +138,35 @@ int main()
|
||||
(void)check8;
|
||||
}
|
||||
|
||||
{
|
||||
int check1[ has_member_function_callable_with_func<functor, int, int>::value ? 1 : -1];
|
||||
int check2[!has_member_function_callable_with_func<functor, int, char*>::value ? 1 : -1];
|
||||
int check3[!has_member_function_callable_with_func<functor2, int, int>::value ? 1 : -1];
|
||||
int check4[ has_member_function_callable_with_func<functor2, int, char*>::value ? 1 : -1];
|
||||
int check5[!has_member_function_callable_with_func<functor3, int, int>::value ? 1 : -1];
|
||||
int check6[!has_member_function_callable_with_func<functor3, int, char*>::value ? 1 : -1];
|
||||
int check7[ has_member_function_callable_with_func<functor4, int, char*>::value ? 1 : -1];
|
||||
{ //func1to2 1arg
|
||||
using func1to2ns::has_member_function_callable_with_func1to2;
|
||||
int check1[ has_member_function_callable_with_func1to2<functor, int>::value ? 1 : -1];
|
||||
int check2[!has_member_function_callable_with_func1to2<functor, char*>::value ? 1 : -1];
|
||||
int check3[!has_member_function_callable_with_func1to2<functor2, int>::value ? 1 : -1];
|
||||
int check4[ has_member_function_callable_with_func1to2<functor2, char*>::value ? 1 : -1];
|
||||
int check5[!has_member_function_callable_with_func1to2<functor3, int>::value ? 1 : -1];
|
||||
int check6[!has_member_function_callable_with_func1to2<functor3, char*>::value ? 1 : -1];
|
||||
int check7[ has_member_function_callable_with_func1to2<functor4, int>::value ? 1 : -1];
|
||||
int check8[ has_member_function_callable_with_func1to2<functor4, char*>::value ? 1 : -1];
|
||||
(void)check1;
|
||||
(void)check2;
|
||||
(void)check3;
|
||||
(void)check4;
|
||||
(void)check5;
|
||||
(void)check6;
|
||||
(void)check7;
|
||||
(void)check8;
|
||||
}
|
||||
|
||||
{ //func0to3 2arg
|
||||
using func0to3ns::has_member_function_callable_with_func0to3;
|
||||
int check1[ has_member_function_callable_with_func0to3<functor, int, int>::value ? 1 : -1];
|
||||
int check2[!has_member_function_callable_with_func0to3<functor, int, char*>::value ? 1 : -1];
|
||||
int check3[!has_member_function_callable_with_func0to3<functor2, int, int>::value ? 1 : -1];
|
||||
int check4[ has_member_function_callable_with_func0to3<functor2, int, char*>::value ? 1 : -1];
|
||||
int check5[!has_member_function_callable_with_func0to3<functor3, int, int>::value ? 1 : -1];
|
||||
int check6[!has_member_function_callable_with_func0to3<functor3, int, char*>::value ? 1 : -1];
|
||||
int check7[ has_member_function_callable_with_func0to3<functor4, int, char*>::value ? 1 : -1];
|
||||
(void)check1;
|
||||
(void)check2;
|
||||
(void)check3;
|
||||
@@ -438,14 +176,51 @@ int main()
|
||||
(void)check7;
|
||||
}
|
||||
|
||||
{
|
||||
int check1[ has_member_function_callable_with_func<functor, int, int, int>::value ? 1 : -1];
|
||||
int check2[!has_member_function_callable_with_func<functor, int, char*, int>::value ? 1 : -1];
|
||||
int check3[!has_member_function_callable_with_func<functor2, int, int, int>::value ? 1 : -1];
|
||||
int check4[ has_member_function_callable_with_func<functor2, int, char*, void*>::value ? 1 : -1];
|
||||
int check5[!has_member_function_callable_with_func<functor3, int, int, int>::value ? 1 : -1];
|
||||
int check6[!has_member_function_callable_with_func<functor3, int, char*, void*>::value ? 1 : -1];
|
||||
int check7[ has_member_function_callable_with_func<functor4, int, char*, int>::value ? 1 : -1];
|
||||
{ //func1to2 2arg
|
||||
using func1to2ns::has_member_function_callable_with_func1to2;
|
||||
int check1[ has_member_function_callable_with_func1to2<functor, int, int>::value ? 1 : -1];
|
||||
int check2[!has_member_function_callable_with_func1to2<functor, int, char*>::value ? 1 : -1];
|
||||
int check3[!has_member_function_callable_with_func1to2<functor2, int, int>::value ? 1 : -1];
|
||||
int check4[ has_member_function_callable_with_func1to2<functor2, int, char*>::value ? 1 : -1];
|
||||
int check5[!has_member_function_callable_with_func1to2<functor3, int, int>::value ? 1 : -1];
|
||||
int check6[!has_member_function_callable_with_func1to2<functor3, int, char*>::value ? 1 : -1];
|
||||
int check7[ has_member_function_callable_with_func1to2<functor4, int, char*>::value ? 1 : -1];
|
||||
(void)check1;
|
||||
(void)check2;
|
||||
(void)check3;
|
||||
(void)check4;
|
||||
(void)check5;
|
||||
(void)check6;
|
||||
(void)check7;
|
||||
}
|
||||
|
||||
{ //func0to3 3arg
|
||||
using func0to3ns::has_member_function_callable_with_func0to3;
|
||||
int check1[ has_member_function_callable_with_func0to3<functor, int, int, int>::value ? 1 : -1];
|
||||
int check2[!has_member_function_callable_with_func0to3<functor, int, char*, int>::value ? 1 : -1];
|
||||
int check3[!has_member_function_callable_with_func0to3<functor2, int, int, int>::value ? 1 : -1];
|
||||
int check4[ has_member_function_callable_with_func0to3<functor2, int, char*, void*>::value ? 1 : -1];
|
||||
int check5[!has_member_function_callable_with_func0to3<functor3, int, int, int>::value ? 1 : -1];
|
||||
int check6[!has_member_function_callable_with_func0to3<functor3, int, char*, void*>::value ? 1 : -1];
|
||||
int check7[ has_member_function_callable_with_func0to3<functor4, int, char*, int>::value ? 1 : -1];
|
||||
(void)check1;
|
||||
(void)check2;
|
||||
(void)check3;
|
||||
(void)check4;
|
||||
(void)check5;
|
||||
(void)check6;
|
||||
(void)check7;
|
||||
}
|
||||
|
||||
{ //func3to3 3arg
|
||||
using func3to3ns::has_member_function_callable_with_func3to3;
|
||||
int check1[ has_member_function_callable_with_func3to3<functor, int, int, int>::value ? 1 : -1];
|
||||
int check2[!has_member_function_callable_with_func3to3<functor, int, char*, int>::value ? 1 : -1];
|
||||
int check3[!has_member_function_callable_with_func3to3<functor2, int, int, int>::value ? 1 : -1];
|
||||
int check4[ has_member_function_callable_with_func3to3<functor2, int, char*, void*>::value ? 1 : -1];
|
||||
int check5[!has_member_function_callable_with_func3to3<functor3, int, int, int>::value ? 1 : -1];
|
||||
int check6[!has_member_function_callable_with_func3to3<functor3, int, char*, void*>::value ? 1 : -1];
|
||||
int check7[ has_member_function_callable_with_func3to3<functor4, int, char*, int>::value ? 1 : -1];
|
||||
(void)check1;
|
||||
(void)check2;
|
||||
(void)check3;
|
||||
@@ -456,5 +231,4 @@ int main()
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user