mirror of
https://github.com/boostorg/intrusive.git
synced 2025-08-02 14:04:36 +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
|
// Software License, Version 1.0. (See accompanying file
|
||||||
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||||
//
|
//
|
||||||
// See http://www.boost.org/libs/intrusive for documentation.
|
// See http://www.boost.org/libs/intrusive for documentation.
|
||||||
//
|
//
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
|
//User define
|
||||||
//Just for BOOST_INTRUSIVE_DETAIL_HAS_MEMBER_FUNCTION_CALLABLE_WITH_0_ARGS_UNSUPPORTED
|
#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 <boost/intrusive/detail/has_member_function_callable_with.hpp>
|
||||||
#include <cstddef>
|
|
||||||
#include <boost/move/utility_core.hpp>
|
|
||||||
|
|
||||||
namespace boost{
|
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME func1to2
|
||||||
namespace intrusive{
|
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN 1
|
||||||
namespace intrusive_detail{
|
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX 2
|
||||||
namespace has_member_function_callable_with {
|
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace func1to2ns {
|
||||||
|
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }
|
||||||
struct dont_care
|
#include <boost/intrusive/detail/has_member_function_callable_with.hpp>
|
||||||
{
|
|
||||||
dont_care(...);
|
#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
|
||||||
template<class T>
|
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace func3to3ns {
|
||||||
struct make_dontcare
|
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }
|
||||||
{
|
#include <boost/intrusive/detail/has_member_function_callable_with.hpp>
|
||||||
typedef has_member_function_callable_with::dont_care type;
|
|
||||||
};
|
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME func0to0
|
||||||
|
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN 0
|
||||||
struct private_type
|
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX 0
|
||||||
{
|
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace func0to0ns {
|
||||||
static private_type p;
|
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }
|
||||||
private_type const &operator,(int) const;
|
#include <boost/intrusive/detail/has_member_function_callable_with.hpp>
|
||||||
};
|
|
||||||
|
///////////////////
|
||||||
typedef char yes_type;
|
///////////////////
|
||||||
struct no_type{ char dummy[2]; };
|
// TEST CODE
|
||||||
|
///////////////////
|
||||||
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)
|
|
||||||
|
|
||||||
struct functor
|
struct functor
|
||||||
{
|
{
|
||||||
void func();
|
//func0to3
|
||||||
void func(const int&);
|
void func0to3();
|
||||||
void func(const int&, const int&);
|
void func0to3(const int&);
|
||||||
void func(const int&, const int&, 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
|
struct functor2
|
||||||
{
|
{
|
||||||
void func(char*);
|
void func0to3(char*);
|
||||||
void func(int, char*);
|
void func0to3(int, char*);
|
||||||
void func(int, char*, double);
|
void func0to3(int, char*, double);
|
||||||
void func(const int&, char*, void *);
|
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
|
struct functor3
|
||||||
@@ -374,43 +79,55 @@ struct functor3
|
|||||||
|
|
||||||
struct functor4
|
struct functor4
|
||||||
{
|
{
|
||||||
void func(...);
|
//func0to3
|
||||||
template<class T>
|
void func0to3(...);
|
||||||
void func(int, const T &);
|
template<class T> void func0to3(int, const T &);
|
||||||
|
template<class T> void func0to3(const T &);
|
||||||
template<class T>
|
template<class T, class U> void func0to3(int, const T &, const U &);
|
||||||
void func(const T &);
|
//func1to2
|
||||||
|
template<class T> void func1to2(int, const T &);
|
||||||
template<class T, class U>
|
template<class T> void func1to2(const T &);
|
||||||
void func(int, const T &, const U &);
|
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()
|
int main()
|
||||||
{
|
{
|
||||||
using namespace boost::intrusive::intrusive_detail;
|
|
||||||
|
|
||||||
#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)
|
||||||
{
|
{ //func0to3 0 arg
|
||||||
int check1[ has_member_function_callable_with_func<functor>::value ? 1 : -1];
|
using func0to3ns::has_member_function_callable_with_func0to3;
|
||||||
int check2[!has_member_function_callable_with_func<functor2>::value ? 1 : -1];
|
int check1[ has_member_function_callable_with_func0to3<functor>::value ? 1 : -1];
|
||||||
int check3[!has_member_function_callable_with_func<functor3>::value ? 1 : -1];
|
int check2[!has_member_function_callable_with_func0to3<functor2>::value ? 1 : -1];
|
||||||
int check4[ has_member_function_callable_with_func<functor4>::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)check1;
|
||||||
(void)check2;
|
(void)check2;
|
||||||
(void)check3;
|
(void)check3;
|
||||||
(void)check4;
|
(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
|
#endif
|
||||||
|
|
||||||
{
|
{ //func0to3 1arg
|
||||||
int check1[ has_member_function_callable_with_func<functor, int>::value ? 1 : -1];
|
using func0to3ns::has_member_function_callable_with_func0to3;
|
||||||
int check2[!has_member_function_callable_with_func<functor, char*>::value ? 1 : -1];
|
int check1[ has_member_function_callable_with_func0to3<functor, int>::value ? 1 : -1];
|
||||||
int check3[!has_member_function_callable_with_func<functor2, int>::value ? 1 : -1];
|
int check2[!has_member_function_callable_with_func0to3<functor, char*>::value ? 1 : -1];
|
||||||
int check4[ has_member_function_callable_with_func<functor2, char*>::value ? 1 : -1];
|
int check3[!has_member_function_callable_with_func0to3<functor2, int>::value ? 1 : -1];
|
||||||
int check5[!has_member_function_callable_with_func<functor3, int>::value ? 1 : -1];
|
int check4[ has_member_function_callable_with_func0to3<functor2, char*>::value ? 1 : -1];
|
||||||
int check6[!has_member_function_callable_with_func<functor3, char*>::value ? 1 : -1];
|
int check5[!has_member_function_callable_with_func0to3<functor3, int>::value ? 1 : -1];
|
||||||
int check7[ has_member_function_callable_with_func<functor4, int>::value ? 1 : -1];
|
int check6[!has_member_function_callable_with_func0to3<functor3, char*>::value ? 1 : -1];
|
||||||
int check8[ has_member_function_callable_with_func<functor4, 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)check1;
|
||||||
(void)check2;
|
(void)check2;
|
||||||
(void)check3;
|
(void)check3;
|
||||||
@@ -421,14 +138,35 @@ int main()
|
|||||||
(void)check8;
|
(void)check8;
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{ //func1to2 1arg
|
||||||
int check1[ has_member_function_callable_with_func<functor, int, int>::value ? 1 : -1];
|
using func1to2ns::has_member_function_callable_with_func1to2;
|
||||||
int check2[!has_member_function_callable_with_func<functor, int, char*>::value ? 1 : -1];
|
int check1[ has_member_function_callable_with_func1to2<functor, int>::value ? 1 : -1];
|
||||||
int check3[!has_member_function_callable_with_func<functor2, int, int>::value ? 1 : -1];
|
int check2[!has_member_function_callable_with_func1to2<functor, char*>::value ? 1 : -1];
|
||||||
int check4[ has_member_function_callable_with_func<functor2, int, char*>::value ? 1 : -1];
|
int check3[!has_member_function_callable_with_func1to2<functor2, int>::value ? 1 : -1];
|
||||||
int check5[!has_member_function_callable_with_func<functor3, int, int>::value ? 1 : -1];
|
int check4[ has_member_function_callable_with_func1to2<functor2, char*>::value ? 1 : -1];
|
||||||
int check6[!has_member_function_callable_with_func<functor3, int, char*>::value ? 1 : -1];
|
int check5[!has_member_function_callable_with_func1to2<functor3, int>::value ? 1 : -1];
|
||||||
int check7[ has_member_function_callable_with_func<functor4, int, char*>::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)check1;
|
||||||
(void)check2;
|
(void)check2;
|
||||||
(void)check3;
|
(void)check3;
|
||||||
@@ -438,14 +176,51 @@ int main()
|
|||||||
(void)check7;
|
(void)check7;
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{ //func1to2 2arg
|
||||||
int check1[ has_member_function_callable_with_func<functor, int, int, int>::value ? 1 : -1];
|
using func1to2ns::has_member_function_callable_with_func1to2;
|
||||||
int check2[!has_member_function_callable_with_func<functor, int, char*, int>::value ? 1 : -1];
|
int check1[ has_member_function_callable_with_func1to2<functor, int, int>::value ? 1 : -1];
|
||||||
int check3[!has_member_function_callable_with_func<functor2, int, int, int>::value ? 1 : -1];
|
int check2[!has_member_function_callable_with_func1to2<functor, int, char*>::value ? 1 : -1];
|
||||||
int check4[ has_member_function_callable_with_func<functor2, int, char*, void*>::value ? 1 : -1];
|
int check3[!has_member_function_callable_with_func1to2<functor2, int, int>::value ? 1 : -1];
|
||||||
int check5[!has_member_function_callable_with_func<functor3, int, int, int>::value ? 1 : -1];
|
int check4[ has_member_function_callable_with_func1to2<functor2, int, char*>::value ? 1 : -1];
|
||||||
int check6[!has_member_function_callable_with_func<functor3, int, char*, void*>::value ? 1 : -1];
|
int check5[!has_member_function_callable_with_func1to2<functor3, int, int>::value ? 1 : -1];
|
||||||
int check7[ has_member_function_callable_with_func<functor4, int, char*, 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)check1;
|
||||||
(void)check2;
|
(void)check2;
|
||||||
(void)check3;
|
(void)check3;
|
||||||
@@ -456,5 +231,4 @@ int main()
|
|||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user