mirror of
https://github.com/boostorg/function.git
synced 2025-07-29 20:37:14 +02:00
function.hpp:
- Work around SGI MIPSpro bug that affects Boost.Python [SVN r15515]
This commit is contained in:
@ -10,15 +10,24 @@
|
|||||||
//
|
//
|
||||||
// This software is provided "as is" without express or implied warranty,
|
// This software is provided "as is" without express or implied warranty,
|
||||||
// and with no claim as to its suitability for any purpose.
|
// and with no claim as to its suitability for any purpose.
|
||||||
|
|
||||||
// For more information, see http://www.boost.org
|
// For more information, see http://www.boost.org
|
||||||
|
|
||||||
// William Kempf, Jesse Jones and Karl Nelson were all very helpful in the
|
// William Kempf, Jesse Jones and Karl Nelson were all very helpful in the
|
||||||
// design of this library.
|
// design of this library.
|
||||||
|
|
||||||
#ifndef BOOST_FUNCTION_HPP
|
#ifndef BOOST_FUNCTION_HPP
|
||||||
#define BOOST_FUNCTION_HPP
|
#define BOOST_FUNCTION_HPP
|
||||||
|
|
||||||
|
#if defined(__sgi) && defined(_COMPILER_VERSION) && _COMPILER_VERSION <= 730
|
||||||
|
// Work around a compiler bug.
|
||||||
|
// boost::python::detail::function has to be seen by the compiler before the
|
||||||
|
// boost::function class template.
|
||||||
|
namespace boost { namespace python { namespace detail {
|
||||||
|
class function;
|
||||||
|
}}}
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <boost/function/function_base.hpp>
|
#include <boost/function/function_base.hpp>
|
||||||
#include <boost/type_traits/function_traits.hpp>
|
#include <boost/type_traits/function_traits.hpp>
|
||||||
#include <boost/type_traits/same_traits.hpp>
|
#include <boost/type_traits/same_traits.hpp>
|
||||||
@ -51,7 +60,7 @@ namespace boost {
|
|||||||
struct real_get_function_impl<0>
|
struct real_get_function_impl<0>
|
||||||
{
|
{
|
||||||
template<
|
template<
|
||||||
typename R,
|
typename R,
|
||||||
typename T1,
|
typename T1,
|
||||||
typename T2,
|
typename T2,
|
||||||
typename T3,
|
typename T3,
|
||||||
@ -70,9 +79,9 @@ namespace boost {
|
|||||||
>
|
>
|
||||||
struct params
|
struct params
|
||||||
{
|
{
|
||||||
typedef function0<R,
|
typedef function0<R,
|
||||||
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
Policy, Mixin,
|
Policy, Mixin,
|
||||||
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
Allocator> type;
|
Allocator> type;
|
||||||
};
|
};
|
||||||
@ -82,7 +91,7 @@ namespace boost {
|
|||||||
struct real_get_function_impl<1>
|
struct real_get_function_impl<1>
|
||||||
{
|
{
|
||||||
template<
|
template<
|
||||||
typename R,
|
typename R,
|
||||||
typename T1,
|
typename T1,
|
||||||
typename T2,
|
typename T2,
|
||||||
typename T3,
|
typename T3,
|
||||||
@ -101,9 +110,9 @@ namespace boost {
|
|||||||
>
|
>
|
||||||
struct params
|
struct params
|
||||||
{
|
{
|
||||||
typedef function1<R, T1,
|
typedef function1<R, T1,
|
||||||
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
Policy, Mixin,
|
Policy, Mixin,
|
||||||
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
Allocator> type;
|
Allocator> type;
|
||||||
};
|
};
|
||||||
@ -113,7 +122,7 @@ namespace boost {
|
|||||||
struct real_get_function_impl<2>
|
struct real_get_function_impl<2>
|
||||||
{
|
{
|
||||||
template<
|
template<
|
||||||
typename R,
|
typename R,
|
||||||
typename T1,
|
typename T1,
|
||||||
typename T2,
|
typename T2,
|
||||||
typename T3,
|
typename T3,
|
||||||
@ -132,9 +141,9 @@ namespace boost {
|
|||||||
>
|
>
|
||||||
struct params
|
struct params
|
||||||
{
|
{
|
||||||
typedef function2<R, T1, T2,
|
typedef function2<R, T1, T2,
|
||||||
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
Policy, Mixin,
|
Policy, Mixin,
|
||||||
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
Allocator> type;
|
Allocator> type;
|
||||||
};
|
};
|
||||||
@ -144,7 +153,7 @@ namespace boost {
|
|||||||
struct real_get_function_impl<3>
|
struct real_get_function_impl<3>
|
||||||
{
|
{
|
||||||
template<
|
template<
|
||||||
typename R,
|
typename R,
|
||||||
typename T1,
|
typename T1,
|
||||||
typename T2,
|
typename T2,
|
||||||
typename T3,
|
typename T3,
|
||||||
@ -163,9 +172,9 @@ namespace boost {
|
|||||||
>
|
>
|
||||||
struct params
|
struct params
|
||||||
{
|
{
|
||||||
typedef function3<R, T1, T2, T3,
|
typedef function3<R, T1, T2, T3,
|
||||||
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
Policy, Mixin,
|
Policy, Mixin,
|
||||||
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
Allocator> type;
|
Allocator> type;
|
||||||
};
|
};
|
||||||
@ -175,7 +184,7 @@ namespace boost {
|
|||||||
struct real_get_function_impl<4>
|
struct real_get_function_impl<4>
|
||||||
{
|
{
|
||||||
template<
|
template<
|
||||||
typename R,
|
typename R,
|
||||||
typename T1,
|
typename T1,
|
||||||
typename T2,
|
typename T2,
|
||||||
typename T3,
|
typename T3,
|
||||||
@ -194,9 +203,9 @@ namespace boost {
|
|||||||
>
|
>
|
||||||
struct params
|
struct params
|
||||||
{
|
{
|
||||||
typedef function4<R, T1, T2, T3, T4,
|
typedef function4<R, T1, T2, T3, T4,
|
||||||
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
Policy, Mixin,
|
Policy, Mixin,
|
||||||
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
Allocator> type;
|
Allocator> type;
|
||||||
};
|
};
|
||||||
@ -206,7 +215,7 @@ namespace boost {
|
|||||||
struct real_get_function_impl<5>
|
struct real_get_function_impl<5>
|
||||||
{
|
{
|
||||||
template<
|
template<
|
||||||
typename R,
|
typename R,
|
||||||
typename T1,
|
typename T1,
|
||||||
typename T2,
|
typename T2,
|
||||||
typename T3,
|
typename T3,
|
||||||
@ -225,11 +234,11 @@ namespace boost {
|
|||||||
>
|
>
|
||||||
struct params
|
struct params
|
||||||
{
|
{
|
||||||
typedef function5<R, T1, T2, T3, T4, T5,
|
typedef function5<R, T1, T2, T3, T4, T5,
|
||||||
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
Policy, Mixin,
|
Policy, Mixin,
|
||||||
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
Allocator>
|
Allocator>
|
||||||
type;
|
type;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@ -238,7 +247,7 @@ namespace boost {
|
|||||||
struct real_get_function_impl<6>
|
struct real_get_function_impl<6>
|
||||||
{
|
{
|
||||||
template<
|
template<
|
||||||
typename R,
|
typename R,
|
||||||
typename T1,
|
typename T1,
|
||||||
typename T2,
|
typename T2,
|
||||||
typename T3,
|
typename T3,
|
||||||
@ -257,9 +266,9 @@ namespace boost {
|
|||||||
>
|
>
|
||||||
struct params
|
struct params
|
||||||
{
|
{
|
||||||
typedef function6<R, T1, T2, T3, T4, T5, T6,
|
typedef function6<R, T1, T2, T3, T4, T5, T6,
|
||||||
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
Policy, Mixin,
|
Policy, Mixin,
|
||||||
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
Allocator>
|
Allocator>
|
||||||
type;
|
type;
|
||||||
@ -270,7 +279,7 @@ namespace boost {
|
|||||||
struct real_get_function_impl<7>
|
struct real_get_function_impl<7>
|
||||||
{
|
{
|
||||||
template<
|
template<
|
||||||
typename R,
|
typename R,
|
||||||
typename T1,
|
typename T1,
|
||||||
typename T2,
|
typename T2,
|
||||||
typename T3,
|
typename T3,
|
||||||
@ -289,9 +298,9 @@ namespace boost {
|
|||||||
>
|
>
|
||||||
struct params
|
struct params
|
||||||
{
|
{
|
||||||
typedef function7<R, T1, T2, T3, T4, T5, T6, T7,
|
typedef function7<R, T1, T2, T3, T4, T5, T6, T7,
|
||||||
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
Policy, Mixin,
|
Policy, Mixin,
|
||||||
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
Allocator> type;
|
Allocator> type;
|
||||||
};
|
};
|
||||||
@ -301,7 +310,7 @@ namespace boost {
|
|||||||
struct real_get_function_impl<8>
|
struct real_get_function_impl<8>
|
||||||
{
|
{
|
||||||
template<
|
template<
|
||||||
typename R,
|
typename R,
|
||||||
typename T1,
|
typename T1,
|
||||||
typename T2,
|
typename T2,
|
||||||
typename T3,
|
typename T3,
|
||||||
@ -320,9 +329,9 @@ namespace boost {
|
|||||||
>
|
>
|
||||||
struct params
|
struct params
|
||||||
{
|
{
|
||||||
typedef function8<R, T1, T2, T3, T4, T5, T6, T7, T8,
|
typedef function8<R, T1, T2, T3, T4, T5, T6, T7, T8,
|
||||||
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
Policy, Mixin,
|
Policy, Mixin,
|
||||||
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
Allocator> type;
|
Allocator> type;
|
||||||
};
|
};
|
||||||
@ -332,7 +341,7 @@ namespace boost {
|
|||||||
struct real_get_function_impl<9>
|
struct real_get_function_impl<9>
|
||||||
{
|
{
|
||||||
template<
|
template<
|
||||||
typename R,
|
typename R,
|
||||||
typename T1,
|
typename T1,
|
||||||
typename T2,
|
typename T2,
|
||||||
typename T3,
|
typename T3,
|
||||||
@ -351,9 +360,9 @@ namespace boost {
|
|||||||
>
|
>
|
||||||
struct params
|
struct params
|
||||||
{
|
{
|
||||||
typedef function9<R, T1, T2, T3, T4, T5, T6, T7, T8, T9,
|
typedef function9<R, T1, T2, T3, T4, T5, T6, T7, T8, T9,
|
||||||
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
Policy, Mixin,
|
Policy, Mixin,
|
||||||
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
Allocator> type;
|
Allocator> type;
|
||||||
};
|
};
|
||||||
@ -363,7 +372,7 @@ namespace boost {
|
|||||||
struct real_get_function_impl<10>
|
struct real_get_function_impl<10>
|
||||||
{
|
{
|
||||||
template<
|
template<
|
||||||
typename R,
|
typename R,
|
||||||
typename T1,
|
typename T1,
|
||||||
typename T2,
|
typename T2,
|
||||||
typename T3,
|
typename T3,
|
||||||
@ -382,151 +391,151 @@ namespace boost {
|
|||||||
>
|
>
|
||||||
struct params
|
struct params
|
||||||
{
|
{
|
||||||
typedef function10<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,
|
typedef function10<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,
|
||||||
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
Policy, Mixin,
|
Policy, Mixin,
|
||||||
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
Allocator> type;
|
Allocator> type;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
||||||
template<bool GetIt, typename Traits>
|
template<bool GetIt, typename Traits>
|
||||||
struct get_arg1_type
|
struct get_arg1_type
|
||||||
{
|
{
|
||||||
typedef unusable type;
|
typedef unusable type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename Traits>
|
template<typename Traits>
|
||||||
struct get_arg1_type<true, Traits>
|
struct get_arg1_type<true, Traits>
|
||||||
{
|
{
|
||||||
typedef typename Traits::arg1_type type;
|
typedef typename Traits::arg1_type type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<bool GetIt, typename Traits>
|
template<bool GetIt, typename Traits>
|
||||||
struct get_arg2_type
|
struct get_arg2_type
|
||||||
{
|
{
|
||||||
typedef unusable type;
|
typedef unusable type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename Traits>
|
template<typename Traits>
|
||||||
struct get_arg2_type<true, Traits>
|
struct get_arg2_type<true, Traits>
|
||||||
{
|
{
|
||||||
typedef typename Traits::arg2_type type;
|
typedef typename Traits::arg2_type type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<bool GetIt, typename Traits>
|
template<bool GetIt, typename Traits>
|
||||||
struct get_arg3_type
|
struct get_arg3_type
|
||||||
{
|
{
|
||||||
typedef unusable type;
|
typedef unusable type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename Traits>
|
template<typename Traits>
|
||||||
struct get_arg3_type<true, Traits>
|
struct get_arg3_type<true, Traits>
|
||||||
{
|
{
|
||||||
typedef typename Traits::arg3_type type;
|
typedef typename Traits::arg3_type type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<bool GetIt, typename Traits>
|
template<bool GetIt, typename Traits>
|
||||||
struct get_arg4_type
|
struct get_arg4_type
|
||||||
{
|
{
|
||||||
typedef unusable type;
|
typedef unusable type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename Traits>
|
template<typename Traits>
|
||||||
struct get_arg4_type<true, Traits>
|
struct get_arg4_type<true, Traits>
|
||||||
{
|
{
|
||||||
typedef typename Traits::arg4_type type;
|
typedef typename Traits::arg4_type type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<bool GetIt, typename Traits>
|
template<bool GetIt, typename Traits>
|
||||||
struct get_arg5_type
|
struct get_arg5_type
|
||||||
{
|
{
|
||||||
typedef unusable type;
|
typedef unusable type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename Traits>
|
template<typename Traits>
|
||||||
struct get_arg5_type<true, Traits>
|
struct get_arg5_type<true, Traits>
|
||||||
{
|
{
|
||||||
typedef typename Traits::arg5_type type;
|
typedef typename Traits::arg5_type type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<bool GetIt, typename Traits>
|
template<bool GetIt, typename Traits>
|
||||||
struct get_arg6_type
|
struct get_arg6_type
|
||||||
{
|
{
|
||||||
typedef unusable type;
|
typedef unusable type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename Traits>
|
template<typename Traits>
|
||||||
struct get_arg6_type<true, Traits>
|
struct get_arg6_type<true, Traits>
|
||||||
{
|
{
|
||||||
typedef typename Traits::arg6_type type;
|
typedef typename Traits::arg6_type type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<bool GetIt, typename Traits>
|
template<bool GetIt, typename Traits>
|
||||||
struct get_arg7_type
|
struct get_arg7_type
|
||||||
{
|
{
|
||||||
typedef unusable type;
|
typedef unusable type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename Traits>
|
template<typename Traits>
|
||||||
struct get_arg7_type<true, Traits>
|
struct get_arg7_type<true, Traits>
|
||||||
{
|
{
|
||||||
typedef typename Traits::arg7_type type;
|
typedef typename Traits::arg7_type type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<bool GetIt, typename Traits>
|
template<bool GetIt, typename Traits>
|
||||||
struct get_arg8_type
|
struct get_arg8_type
|
||||||
{
|
{
|
||||||
typedef unusable type;
|
typedef unusable type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename Traits>
|
template<typename Traits>
|
||||||
struct get_arg8_type<true, Traits>
|
struct get_arg8_type<true, Traits>
|
||||||
{
|
{
|
||||||
typedef typename Traits::arg8_type type;
|
typedef typename Traits::arg8_type type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<bool GetIt, typename Traits>
|
template<bool GetIt, typename Traits>
|
||||||
struct get_arg9_type
|
struct get_arg9_type
|
||||||
{
|
{
|
||||||
typedef unusable type;
|
typedef unusable type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename Traits>
|
template<typename Traits>
|
||||||
struct get_arg9_type<true, Traits>
|
struct get_arg9_type<true, Traits>
|
||||||
{
|
{
|
||||||
typedef typename Traits::arg9_type type;
|
typedef typename Traits::arg9_type type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<bool GetIt, typename Traits>
|
template<bool GetIt, typename Traits>
|
||||||
struct get_arg10_type
|
struct get_arg10_type
|
||||||
{
|
{
|
||||||
typedef unusable type;
|
typedef unusable type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename Traits>
|
template<typename Traits>
|
||||||
struct get_arg10_type<true, Traits>
|
struct get_arg10_type<true, Traits>
|
||||||
{
|
{
|
||||||
typedef typename Traits::arg10_type type;
|
typedef typename Traits::arg10_type type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<int X, int Y>
|
template<int X, int Y>
|
||||||
struct gte
|
struct gte
|
||||||
{
|
{
|
||||||
BOOST_STATIC_CONSTANT(bool, value = (X >= Y));
|
BOOST_STATIC_CONSTANT(bool, value = (X >= Y));
|
||||||
};
|
};
|
||||||
|
|
||||||
template<bool IsFunction,
|
template<bool IsFunction,
|
||||||
typename InR,
|
typename InR,
|
||||||
typename InT1,
|
typename InT1,
|
||||||
typename InT2,
|
typename InT2,
|
||||||
typename InT3,
|
typename InT3,
|
||||||
typename InT4,
|
typename InT4,
|
||||||
typename InT5,
|
typename InT5,
|
||||||
typename InT6,
|
typename InT6,
|
||||||
typename InT7,
|
typename InT7,
|
||||||
typename InT8,
|
typename InT8,
|
||||||
typename InT9,
|
typename InT9,
|
||||||
typename InT10,
|
typename InT10,
|
||||||
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
@ -539,25 +548,25 @@ namespace boost {
|
|||||||
typedef function_traits<InR> traits;
|
typedef function_traits<InR> traits;
|
||||||
|
|
||||||
typedef typename traits::result_type R;
|
typedef typename traits::result_type R;
|
||||||
typedef typename get_arg1_type<(gte<(traits::arity), 1>::value),
|
typedef typename get_arg1_type<(gte<(traits::arity), 1>::value),
|
||||||
traits>::type T1;
|
traits>::type T1;
|
||||||
typedef typename get_arg2_type<(gte<(traits::arity), 2>::value),
|
typedef typename get_arg2_type<(gte<(traits::arity), 2>::value),
|
||||||
traits>::type T2;
|
traits>::type T2;
|
||||||
typedef typename get_arg3_type<(gte<(traits::arity), 3>::value),
|
typedef typename get_arg3_type<(gte<(traits::arity), 3>::value),
|
||||||
traits>::type T3;
|
traits>::type T3;
|
||||||
typedef typename get_arg4_type<(gte<(traits::arity), 4>::value),
|
typedef typename get_arg4_type<(gte<(traits::arity), 4>::value),
|
||||||
traits>::type T4;
|
traits>::type T4;
|
||||||
typedef typename get_arg5_type<(gte<(traits::arity), 5>::value),
|
typedef typename get_arg5_type<(gte<(traits::arity), 5>::value),
|
||||||
traits>::type T5;
|
traits>::type T5;
|
||||||
typedef typename get_arg6_type<(gte<(traits::arity), 6>::value),
|
typedef typename get_arg6_type<(gte<(traits::arity), 6>::value),
|
||||||
traits>::type T6;
|
traits>::type T6;
|
||||||
typedef typename get_arg7_type<(gte<(traits::arity), 7>::value),
|
typedef typename get_arg7_type<(gte<(traits::arity), 7>::value),
|
||||||
traits>::type T7;
|
traits>::type T7;
|
||||||
typedef typename get_arg8_type<(gte<(traits::arity), 8>::value),
|
typedef typename get_arg8_type<(gte<(traits::arity), 8>::value),
|
||||||
traits>::type T8;
|
traits>::type T8;
|
||||||
typedef typename get_arg9_type<(gte<(traits::arity), 9>::value),
|
typedef typename get_arg9_type<(gte<(traits::arity), 9>::value),
|
||||||
traits>::type T9;
|
traits>::type T9;
|
||||||
typedef typename get_arg10_type<(gte<(traits::arity), 10>::value),
|
typedef typename get_arg10_type<(gte<(traits::arity), 10>::value),
|
||||||
traits>::type T10;
|
traits>::type T10;
|
||||||
|
|
||||||
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
@ -578,15 +587,15 @@ namespace boost {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
template<typename InR,
|
template<typename InR,
|
||||||
typename InT1,
|
typename InT1,
|
||||||
typename InT2,
|
typename InT2,
|
||||||
typename InT3,
|
typename InT3,
|
||||||
typename InT4,
|
typename InT4,
|
||||||
typename InT5,
|
typename InT5,
|
||||||
typename InT6,
|
typename InT6,
|
||||||
typename InT7,
|
typename InT7,
|
||||||
typename InT8,
|
typename InT8,
|
||||||
typename InT9,
|
typename InT9,
|
||||||
typename InT10,
|
typename InT10,
|
||||||
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
@ -598,7 +607,7 @@ namespace boost {
|
|||||||
InT5, InT6, InT7, InT8, InT9, InT10,
|
InT5, InT6, InT7, InT8, InT9, InT10,
|
||||||
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
InPolicy, InMixin,
|
InPolicy, InMixin,
|
||||||
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
InAllocator>
|
InAllocator>
|
||||||
{
|
{
|
||||||
// Not a function, so just map the types directly
|
// Not a function, so just map the types directly
|
||||||
@ -625,20 +634,20 @@ namespace boost {
|
|||||||
#endif // ndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
#endif // ndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
||||||
|
|
||||||
template<
|
template<
|
||||||
typename InR,
|
typename InR,
|
||||||
typename InT1,
|
typename InT1,
|
||||||
typename InT2,
|
typename InT2,
|
||||||
typename InT3,
|
typename InT3,
|
||||||
typename InT4,
|
typename InT4,
|
||||||
typename InT5,
|
typename InT5,
|
||||||
typename InT6,
|
typename InT6,
|
||||||
typename InT7,
|
typename InT7,
|
||||||
typename InT8,
|
typename InT8,
|
||||||
typename InT9,
|
typename InT9,
|
||||||
typename InT10,
|
typename InT10,
|
||||||
typename InPolicy = empty_function_policy,
|
typename InPolicy = empty_function_policy,
|
||||||
typename InMixin = empty_function_mixin,
|
typename InMixin = empty_function_mixin,
|
||||||
typename InAllocator = std::allocator<function_base>
|
typename InAllocator = std::allocator<function_base>
|
||||||
>
|
>
|
||||||
struct get_function_impl
|
struct get_function_impl
|
||||||
{
|
{
|
||||||
@ -647,7 +656,7 @@ namespace boost {
|
|||||||
InR, InT1, InT2, InT3, InT4, InT5,
|
InR, InT1, InT2, InT3, InT4, InT5,
|
||||||
InT6, InT7, InT8, InT9, InT10,
|
InT6, InT7, InT8, InT9, InT10,
|
||||||
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
InPolicy, InMixin,
|
InPolicy, InMixin,
|
||||||
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
InAllocator> decoder;
|
InAllocator> decoder;
|
||||||
typedef typename decoder::R R;
|
typedef typename decoder::R R;
|
||||||
@ -685,9 +694,9 @@ namespace boost {
|
|||||||
|
|
||||||
typedef typename real_get_function_impl<
|
typedef typename real_get_function_impl<
|
||||||
(count_used_args<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::value)
|
(count_used_args<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::value)
|
||||||
>::template params<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,
|
>::template params<R, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,
|
||||||
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
Policy, Mixin,
|
Policy, Mixin,
|
||||||
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
Allocator>::type
|
Allocator>::type
|
||||||
type;
|
type;
|
||||||
@ -695,25 +704,25 @@ namespace boost {
|
|||||||
|
|
||||||
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
template<
|
template<
|
||||||
typename InR,
|
typename InR,
|
||||||
typename InT1,
|
typename InT1,
|
||||||
typename InT2,
|
typename InT2,
|
||||||
typename InT3,
|
typename InT3,
|
||||||
typename InT4,
|
typename InT4,
|
||||||
typename InT5,
|
typename InT5,
|
||||||
typename InT6,
|
typename InT6,
|
||||||
typename InT7,
|
typename InT7,
|
||||||
typename InT8,
|
typename InT8,
|
||||||
typename InT9,
|
typename InT9,
|
||||||
typename InT10,
|
typename InT10,
|
||||||
typename InMyPolicy = empty_function_policy,
|
typename InMyPolicy = empty_function_policy,
|
||||||
typename InMyMixin = empty_function_mixin,
|
typename InMyMixin = empty_function_mixin,
|
||||||
typename InMyAllocator = std::allocator<function_base>
|
typename InMyAllocator = std::allocator<function_base>
|
||||||
>
|
>
|
||||||
class function_traits_builder
|
class function_traits_builder
|
||||||
{
|
{
|
||||||
typedef get_function_impl<InR, InT1, InT2, InT3, InT4, InT5, InT6, InT7,
|
typedef get_function_impl<InR, InT1, InT2, InT3, InT4, InT5, InT6, InT7,
|
||||||
InT8, InT9, InT10, InMyPolicy, InMyMixin,
|
InT8, InT9, InT10, InMyPolicy, InMyMixin,
|
||||||
InMyAllocator>
|
InMyAllocator>
|
||||||
impl;
|
impl;
|
||||||
|
|
||||||
@ -740,29 +749,29 @@ namespace boost {
|
|||||||
|
|
||||||
#ifndef BOOST_NO_DEPENDENT_NESTED_DERIVATIONS
|
#ifndef BOOST_NO_DEPENDENT_NESTED_DERIVATIONS
|
||||||
template<typename Policy>
|
template<typename Policy>
|
||||||
struct policy :
|
struct policy :
|
||||||
public function_traits_builder<MyR, MyT1, MyT2, MyT3, MyT4, MyT5, MyT6,
|
public function_traits_builder<MyR, MyT1, MyT2, MyT3, MyT4, MyT5, MyT6,
|
||||||
MyT7, MyT8, MyT9, MyT10, Policy,
|
MyT7, MyT8, MyT9, MyT10, Policy,
|
||||||
mixin_type, allocator_type> {};
|
mixin_type, allocator_type> {};
|
||||||
|
|
||||||
template<typename Mixin>
|
template<typename Mixin>
|
||||||
struct mixin :
|
struct mixin :
|
||||||
public function_traits_builder<MyR, MyT1, MyT2, MyT3, MyT4, MyT5, MyT6,
|
public function_traits_builder<MyR, MyT1, MyT2, MyT3, MyT4, MyT5, MyT6,
|
||||||
MyT7, MyT8, MyT9, MyT10, policy_type,
|
MyT7, MyT8, MyT9, MyT10, policy_type,
|
||||||
Mixin, allocator_type> {};
|
Mixin, allocator_type> {};
|
||||||
|
|
||||||
template<typename Allocator>
|
template<typename Allocator>
|
||||||
struct allocator :
|
struct allocator :
|
||||||
public function_traits_builder<MyR, MyT1, MyT2, MyT3, MyT4, MyT5, MyT6,
|
public function_traits_builder<MyR, MyT1, MyT2, MyT3, MyT4, MyT5, MyT6,
|
||||||
MyT7, MyT8, MyT9, MyT10, policy_type,
|
MyT7, MyT8, MyT9, MyT10, policy_type,
|
||||||
mixin_type, Allocator> {};
|
mixin_type, Allocator> {};
|
||||||
#else
|
#else
|
||||||
template<typename Policy>
|
template<typename Policy>
|
||||||
struct policy
|
struct policy
|
||||||
{
|
{
|
||||||
typedef typename function_traits_builder<MyR, MyT1, MyT2, MyT3, MyT4,
|
typedef typename function_traits_builder<MyR, MyT1, MyT2, MyT3, MyT4,
|
||||||
MyT5, MyT6, MyT7, MyT8, MyT9,
|
MyT5, MyT6, MyT7, MyT8, MyT9,
|
||||||
MyT10, Policy, mixin_type,
|
MyT10, Policy, mixin_type,
|
||||||
allocator_type>::type
|
allocator_type>::type
|
||||||
type;
|
type;
|
||||||
};
|
};
|
||||||
@ -770,8 +779,8 @@ namespace boost {
|
|||||||
template<typename Mixin>
|
template<typename Mixin>
|
||||||
struct mixin
|
struct mixin
|
||||||
{
|
{
|
||||||
typedef typename function_traits_builder<MyR, MyT1, MyT2, MyT3, MyT4,
|
typedef typename function_traits_builder<MyR, MyT1, MyT2, MyT3, MyT4,
|
||||||
MyT5, MyT6, MyT7, MyT8, MyT9,
|
MyT5, MyT6, MyT7, MyT8, MyT9,
|
||||||
MyT10, policy_type, Mixin,
|
MyT10, policy_type, Mixin,
|
||||||
allocator_type>::type
|
allocator_type>::type
|
||||||
type;
|
type;
|
||||||
@ -780,8 +789,8 @@ namespace boost {
|
|||||||
template<typename Allocator>
|
template<typename Allocator>
|
||||||
struct allocator
|
struct allocator
|
||||||
{
|
{
|
||||||
typedef typename function_traits_builder<MyR, MyT1, MyT2, MyT3, MyT4,
|
typedef typename function_traits_builder<MyR, MyT1, MyT2, MyT3, MyT4,
|
||||||
MyT5, MyT6, MyT7, MyT8, MyT9,
|
MyT5, MyT6, MyT7, MyT8, MyT9,
|
||||||
MyT10, policy_type, mixin_type,
|
MyT10, policy_type, mixin_type,
|
||||||
Allocator>::type
|
Allocator>::type
|
||||||
type;
|
type;
|
||||||
@ -793,8 +802,8 @@ namespace boost {
|
|||||||
} // end namespace detail
|
} // end namespace detail
|
||||||
|
|
||||||
template<
|
template<
|
||||||
typename R,
|
typename R,
|
||||||
typename T1 = detail::function::unusable,
|
typename T1 = detail::function::unusable,
|
||||||
typename T2 = detail::function::unusable,
|
typename T2 = detail::function::unusable,
|
||||||
typename T3 = detail::function::unusable,
|
typename T3 = detail::function::unusable,
|
||||||
typename T4 = detail::function::unusable,
|
typename T4 = detail::function::unusable,
|
||||||
@ -806,16 +815,16 @@ namespace boost {
|
|||||||
typename T10 = detail::function::unusable
|
typename T10 = detail::function::unusable
|
||||||
>
|
>
|
||||||
class function :
|
class function :
|
||||||
public detail::function::get_function_impl<R, T1, T2, T3, T4, T5, T6, T7,
|
public detail::function::get_function_impl<R, T1, T2, T3, T4, T5, T6, T7,
|
||||||
T8, T9, T10>::type
|
T8, T9, T10>::type
|
||||||
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
, public detail::function::function_traits_builder<R, T1, T2, T3, T4, T5,
|
, public detail::function::function_traits_builder<R, T1, T2, T3, T4, T5,
|
||||||
T6, T7, T8, T9, T10>
|
T6, T7, T8, T9, T10>
|
||||||
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
{
|
{
|
||||||
typedef typename detail::function::get_function_impl<R, T1, T2, T3, T4, T5,
|
typedef typename detail::function::get_function_impl<R, T1, T2, T3, T4, T5,
|
||||||
T6, T7, T8, T9, T10
|
T6, T7, T8, T9, T10
|
||||||
>::type
|
>::type
|
||||||
base_type;
|
base_type;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -823,16 +832,16 @@ namespace boost {
|
|||||||
typedef typename base_type::policy_type policy_type;
|
typedef typename base_type::policy_type policy_type;
|
||||||
typedef typename base_type::mixin_type mixin_type;
|
typedef typename base_type::mixin_type mixin_type;
|
||||||
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
typedef typename base_type::allocator_type allocator_type;
|
typedef typename base_type::allocator_type allocator_type;
|
||||||
typedef function self_type;
|
typedef function self_type;
|
||||||
|
|
||||||
function() : base_type() {}
|
function() : base_type() {}
|
||||||
|
|
||||||
template<typename Functor>
|
template<typename Functor>
|
||||||
function(Functor BOOST_FUNCTION_TARGET_FIX(const &) f) : base_type(f) {}
|
function(Functor BOOST_FUNCTION_TARGET_FIX(const &) f) : base_type(f) {}
|
||||||
|
|
||||||
function(const self_type& f) : base_type(static_cast<const base_type&>(f)){}
|
function(const self_type& f) : base_type(static_cast<const base_type&>(f)){}
|
||||||
|
|
||||||
template<typename Functor>
|
template<typename Functor>
|
||||||
self_type& operator=(Functor BOOST_FUNCTION_TARGET_FIX(const &) f)
|
self_type& operator=(Functor BOOST_FUNCTION_TARGET_FIX(const &) f)
|
||||||
{
|
{
|
||||||
@ -847,38 +856,38 @@ namespace boost {
|
|||||||
}
|
}
|
||||||
|
|
||||||
self_type& operator=(const self_type& f)
|
self_type& operator=(const self_type& f)
|
||||||
{
|
{
|
||||||
self_type(f).swap(*this);
|
self_type(f).swap(*this);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
#ifndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
template<typename Functor>
|
template<typename Functor>
|
||||||
BOOST_FUNCTION_DEPRECATED_PRE
|
BOOST_FUNCTION_DEPRECATED_PRE
|
||||||
void set(Functor BOOST_FUNCTION_TARGET_FIX(const &) f)
|
void set(Functor BOOST_FUNCTION_TARGET_FIX(const &) f)
|
||||||
{
|
{
|
||||||
BOOST_FUNCTION_DEPRECATED_INNER
|
BOOST_FUNCTION_DEPRECATED_INNER
|
||||||
self_type(f).swap(*this);
|
self_type(f).swap(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_FUNCTION_DEPRECATED_PRE
|
BOOST_FUNCTION_DEPRECATED_PRE
|
||||||
void set(const base_type& f)
|
void set(const base_type& f)
|
||||||
{
|
{
|
||||||
BOOST_FUNCTION_DEPRECATED_INNER
|
BOOST_FUNCTION_DEPRECATED_INNER
|
||||||
self_type(f).swap(*this);
|
self_type(f).swap(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_FUNCTION_DEPRECATED_PRE
|
BOOST_FUNCTION_DEPRECATED_PRE
|
||||||
void set(const self_type& f)
|
void set(const self_type& f)
|
||||||
{
|
{
|
||||||
BOOST_FUNCTION_DEPRECATED_INNER
|
BOOST_FUNCTION_DEPRECATED_INNER
|
||||||
self_type(f).swap(*this);
|
self_type(f).swap(*this);
|
||||||
}
|
}
|
||||||
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
#endif // ndef BOOST_FUNCTION_NO_DEPRECATED
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename R,
|
template<typename R,
|
||||||
typename T1,
|
typename T1,
|
||||||
typename T2,
|
typename T2,
|
||||||
typename T3,
|
typename T3,
|
||||||
typename T4,
|
typename T4,
|
||||||
|
Reference in New Issue
Block a user