1
0
Fork 0
mirror of https://github.com/bolero-MURAKAMI/Sprout synced 2025-08-03 12:49:50 +00:00

add SPROUT_FORWARD - workaround for ICC

This commit is contained in:
bolero-MURAKAMI 2014-02-22 16:32:51 +09:00
parent 7831105add
commit 274122efb2
202 changed files with 750 additions and 741 deletions

View file

@ -28,7 +28,7 @@ namespace sprout {
operator()(T&& x)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(&std::declval<T>()))
{
return &sprout::forward<T>(x);
return &SPROUT_FORWARD(T, x);
}
};
} // namespace sprout

View file

@ -28,7 +28,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() = std::declval<U>()))
{
return sprout::forward<T>(x) = sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) = SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -107,7 +107,7 @@ namespace sprout {
) const volatile
-> decltype(arg(std::declval<Args>()...))
{
return arg(sprout::forward<Args>(sprout::tuples::get<Indexes>(tuple))...);
return arg(SPROUT_FORWARD(Args, sprout::tuples::get<Indexes>(tuple))...);
}
public:
template<typename CVArg, typename... Args>
@ -136,9 +136,8 @@ namespace sprout {
template<typename Tuple>
typename result<mu (Arg, Tuple)>::type
SPROUT_CONSTEXPR operator()(Arg /*const volatile&*/, Tuple& tuple) const volatile {
return sprout::forward<typename result<mu (Arg, Tuple)>::type>(
sprout::tuples::get<(sprout::is_placeholder<Arg>::value - 1)>(tuple)
);
typedef typename result<mu (Arg, Tuple)>::type type;
return SPROUT_FORWARD(type, sprout::tuples::get<(sprout::is_placeholder<Arg>::value - 1)>(tuple));
}
};
template<typename Arg>
@ -154,7 +153,7 @@ namespace sprout {
public:
template<typename CVArg, typename Tuple>
SPROUT_CONSTEXPR CVArg&& operator()(CVArg&& arg, Tuple&) const volatile {
return sprout::forward<CVArg>(arg);
return SPROUT_FORWARD(CVArg, arg);
}
};
@ -395,12 +394,12 @@ namespace sprout {
-> decltype(
sprout::detail::get_bound_helper::get_bound<
sprout::detail::bound_position<I, typename std::remove_reference<Bounds>::type, ArgSize>::value
>(sprout::forward<Bounds>(bound_args))
>(SPROUT_FORWARD(Bounds, bound_args))
)
{
return sprout::detail::get_bound_helper::get_bound<
sprout::detail::bound_position<I, typename std::remove_reference<Bounds>::type, ArgSize>::value
>(sprout::forward<Bounds>(bound_args));
>(SPROUT_FORWARD(Bounds, bound_args));
}
} // namespace detail
@ -490,7 +489,7 @@ namespace sprout {
template<typename... Args>
explicit SPROUT_CONSTEXPR binder_impl(Functor const& f, Args&&... args)
: f_(f)
, bound_args_(sprout::forward<Args>(args)...)
, bound_args_(SPROUT_FORWARD(Args, args)...)
{}
binder_impl(binder_impl const&) = default;
};
@ -510,7 +509,7 @@ namespace sprout {
public:
template<typename... Args>
explicit SPROUT_CONSTEXPR binder(Functor const& f, Args&&... args)
: impl_type(f, sprout::forward<Args>(args)...)
: impl_type(f, SPROUT_FORWARD(Args, args)...)
{}
binder(binder const&) = default;
template<
@ -521,7 +520,7 @@ namespace sprout {
>
Result operator()(Args&&... args) {
return impl_type::template call<Result>(
sprout::tuples::forward_as_tuple(sprout::forward<Args>(args)...),
sprout::tuples::forward_as_tuple(SPROUT_FORWARD(Args, args)...),
sprout::detail::bound_indexes<bounds_type, sizeof...(Args)>::make()
);
}
@ -533,7 +532,7 @@ namespace sprout {
>
SPROUT_CONSTEXPR Result operator()(Args&&... args) const {
return impl_type::template call_c<Result>(
sprout::tuples::forward_as_tuple(sprout::forward<Args>(args)...),
sprout::tuples::forward_as_tuple(SPROUT_FORWARD(Args, args)...),
sprout::detail::bound_indexes<bounds_type, sizeof...(Args)>::make()
);
}
@ -545,7 +544,7 @@ namespace sprout {
>
Result operator()(Args&&... args) volatile {
return impl_type::template call_v<Result>(
sprout::tuples::forward_as_tuple(sprout::forward<Args>(args)...),
sprout::tuples::forward_as_tuple(SPROUT_FORWARD(Args, args)...),
sprout::detail::bound_indexes<bounds_type, sizeof...(Args)>::make()
);
}
@ -557,7 +556,7 @@ namespace sprout {
>
SPROUT_CONSTEXPR Result operator()(Args&&... args) const volatile {
return impl_type::template call_cv<Result>(
sprout::tuples::forward_as_tuple(sprout::forward<Args>(args)...),
sprout::tuples::forward_as_tuple(SPROUT_FORWARD(Args, args)...),
sprout::detail::bound_indexes<bounds_type, sizeof...(Args)>::make()
);
}
@ -577,7 +576,7 @@ namespace sprout {
public:
template<typename... Args>
explicit SPROUT_CONSTEXPR cbinder(Functor const& f, Args&&... args)
: impl_type(f, sprout::forward<Args>(args)...)
: impl_type(f, SPROUT_FORWARD(Args, args)...)
{}
cbinder(cbinder const&) = default;
template<
@ -588,7 +587,7 @@ namespace sprout {
>
SPROUT_CONSTEXPR Result operator()(Args&&... args) const {
return impl_type::template call_c<Result>(
sprout::tuples::forward_as_tuple(sprout::forward<Args>(args)...),
sprout::tuples::forward_as_tuple(SPROUT_FORWARD(Args, args)...),
sprout::detail::bound_indexes<bounds_type, sizeof...(Args)>::make()
);
}
@ -600,7 +599,7 @@ namespace sprout {
>
SPROUT_CONSTEXPR Result operator()(Args&&... args) const volatile {
return impl_type::template call_cv<Result>(
sprout::tuples::forward_as_tuple(sprout::forward<Args>(args)...),
sprout::tuples::forward_as_tuple(SPROUT_FORWARD(Args, args)...),
sprout::detail::bound_indexes<bounds_type, sizeof...(Args)>::make()
);
}
@ -704,7 +703,7 @@ namespace sprout {
template<typename... Args>
explicit SPROUT_CONSTEXPR res_binder_impl(Functor const& f, Args&&... args)
: f_(f)
, bound_args_(sprout::forward<Args>(args)...)
, bound_args_(SPROUT_FORWARD(Args, args)...)
{}
res_binder_impl(res_binder_impl const&) = default;
};
@ -726,34 +725,34 @@ namespace sprout {
public:
template<typename... Args>
explicit res_binder(Functor const& f, Args&&... args)
: impl_type(f, sprout::forward<Args>(args)...)
: impl_type(f, SPROUT_FORWARD(Args, args)...)
{}
res_binder(res_binder const&) = default;
template<typename... Args>
result_type operator()(Args&&... args) {
return impl_type::template call<Result>(
sprout::tuples::forward_as_tuple(sprout::forward<Args>(args)...),
sprout::tuples::forward_as_tuple(SPROUT_FORWARD(Args, args)...),
sprout::detail::bound_indexes<bounds_type, sizeof...(Args)>::make()
);
}
template<typename... Args>
SPROUT_CONSTEXPR result_type operator()(Args&&... args) const {
return impl_type::template call<Result>(
sprout::tuples::forward_as_tuple(sprout::forward<Args>(args)...),
sprout::tuples::forward_as_tuple(SPROUT_FORWARD(Args, args)...),
sprout::detail::bound_indexes<bounds_type, sizeof...(Args)>::make()
);
}
template<typename... Args>
result_type operator()(Args&&... args) volatile {
return impl_type::template call<Result>(
sprout::tuples::forward_as_tuple(sprout::forward<Args>(args)...),
sprout::tuples::forward_as_tuple(SPROUT_FORWARD(Args, args)...),
sprout::detail::bound_indexes<bounds_type, sizeof...(Args)>::make()
);
}
template<typename... Args>
SPROUT_CONSTEXPR result_type operator()(Args&&... args) const volatile {
return impl_type::template call<Result>(
sprout::tuples::forward_as_tuple(sprout::forward<Args>(args)...),
sprout::tuples::forward_as_tuple(SPROUT_FORWARD(Args, args)...),
sprout::detail::bound_indexes<bounds_type, sizeof...(Args)>::make()
);
}
@ -775,20 +774,20 @@ namespace sprout {
public:
template<typename... Args>
explicit SPROUT_CONSTEXPR res_cbinder(Functor const& f, Args&&... args)
: impl_type(f, sprout::forward<Args>(args)...)
: impl_type(f, SPROUT_FORWARD(Args, args)...)
{}
res_cbinder(res_cbinder const&) = default;
template<typename... Args>
SPROUT_CONSTEXPR result_type operator()(Args&&... args) const {
return impl_type::template call<Result>(
sprout::tuples::forward_as_tuple(sprout::forward<Args>(args)...),
sprout::tuples::forward_as_tuple(SPROUT_FORWARD(Args, args)...),
sprout::detail::bound_indexes<bounds_type, sizeof...(Args)>::make()
);
}
template<typename... Args>
SPROUT_CONSTEXPR result_type operator()(Args&&... args) const volatile {
return impl_type::template call<Result>(
sprout::tuples::forward_as_tuple(sprout::forward<Args>(args)...),
sprout::tuples::forward_as_tuple(SPROUT_FORWARD(Args, args)...),
sprout::detail::bound_indexes<bounds_type, sizeof...(Args)>::make()
);
}
@ -999,7 +998,7 @@ namespace sprout {
typedef sprout::detail::bind_helper<false, F, BoundArgs...> helper_type;
typedef typename helper_type::maybe_type maybe_type;
typedef typename helper_type::type result_type;
return result_type(maybe_type::do_wrap(sprout::forward<F>(f)), sprout::forward<BoundArgs>(args)...);
return result_type(maybe_type::do_wrap(SPROUT_FORWARD(F, f)), SPROUT_FORWARD(BoundArgs, args)...);
}
template<typename R, typename F, typename... BoundArgs>
inline SPROUT_CONSTEXPR typename sprout::res_bind_result<R, F, BoundArgs...>::type
@ -1007,7 +1006,7 @@ namespace sprout {
typedef sprout::detail::res_bind_helper<false, R, F, BoundArgs...> helper_type;
typedef typename helper_type::maybe_type maybe_type;
typedef typename helper_type::type result_type;
return result_type(maybe_type::do_wrap(sprout::forward<F>(f)), sprout::forward<BoundArgs>(args)...);
return result_type(maybe_type::do_wrap(SPROUT_FORWARD(F, f)), SPROUT_FORWARD(BoundArgs, args)...);
}
//
@ -1019,7 +1018,7 @@ namespace sprout {
typedef sprout::detail::bind_helper<true, F, BoundArgs...> helper_type;
typedef typename helper_type::maybe_type maybe_type;
typedef typename helper_type::type result_type;
return result_type(maybe_type::do_wrap(sprout::forward<F>(f)), sprout::forward<BoundArgs>(args)...);
return result_type(maybe_type::do_wrap(SPROUT_FORWARD(F, f)), SPROUT_FORWARD(BoundArgs, args)...);
}
template<typename R, typename F, typename... BoundArgs>
inline SPROUT_CONSTEXPR typename sprout::res_cbind_result<R, F, BoundArgs...>::type
@ -1027,7 +1026,7 @@ namespace sprout {
typedef sprout::detail::res_bind_helper<true, R, F, BoundArgs...> helper_type;
typedef typename helper_type::maybe_type maybe_type;
typedef typename helper_type::type result_type;
return result_type(maybe_type::do_wrap(sprout::forward<F>(f)), sprout::forward<BoundArgs>(args)...);
return result_type(maybe_type::do_wrap(SPROUT_FORWARD(F, f)), SPROUT_FORWARD(BoundArgs, args)...);
}
} // namespace sprout

View file

@ -36,7 +36,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() & std::declval<U>()))
{
return sprout::forward<T>(x) & sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) & SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -28,7 +28,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() &= std::declval<U>()))
{
return sprout::forward<T>(x) &= sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) &= SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -35,7 +35,7 @@ namespace sprout {
operator()(T&& x)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(~std::declval<T>()))
{
return ~sprout::forward<T>(x);
return ~SPROUT_FORWARD(T, x);
}
};
} // namespace sprout

View file

@ -36,7 +36,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() | std::declval<U>()))
{
return sprout::forward<T>(x) | sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) | SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -28,7 +28,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() |= std::declval<U>()))
{
return sprout::forward<T>(x) |= sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) |= SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -36,7 +36,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() ^ std::declval<U>()))
{
return sprout::forward<T>(x) ^ sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) ^ SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -28,7 +28,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() ^= std::declval<U>()))
{
return sprout::forward<T>(x) ^= sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) ^= SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -28,7 +28,7 @@ namespace sprout {
operator()(F&& f, As&&... as)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<F>()(std::declval<As>()...)))
{
return sprout::forward<F>(f)(sprout::forward<As>(as)...);
return SPROUT_FORWARD(F, f)(SPROUT_FORWARD(As, as)...);
}
};
} // namespace sprout

View file

@ -28,7 +28,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR((std::declval<T>(), std::declval<U>())))
{
return sprout::forward<T>(x), sprout::forward<U>(y);
return SPROUT_FORWARD(T, x), SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -28,7 +28,7 @@ namespace sprout {
operator()(T&& x, U&& y, V&& z)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() ? std::declval<U>() : std::declval<V>()))
{
return sprout::forward<T>(x) ? sprout::forward<U>(y) : sprout::forward<V>(z);
return SPROUT_FORWARD(T, x) ? SPROUT_FORWARD(U, y) : SPROUT_FORWARD(V, z);
}
};
} // namespace sprout

View file

@ -28,7 +28,7 @@ namespace sprout {
operator()(T&& x)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(*std::declval<T>()))
{
return *sprout::forward<T>(x);
return *SPROUT_FORWARD(T, x);
}
};
} // namespace sprout

View file

@ -38,7 +38,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() / std::declval<U>()))
{
return sprout::forward<T>(x) / sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) / SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -28,7 +28,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() /= std::declval<U>()))
{
return sprout::forward<T>(x) /= sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) /= SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -38,7 +38,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() == std::declval<U>()))
{
return sprout::forward<T>(x) == sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) == SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -48,7 +48,7 @@ namespace sprout {
template<typename T, typename U>
SPROUT_CONSTEXPR decltype(!std::declval<Compare const&>()(std::declval<T>(), std::declval<U>()) && !std::declval<Compare const&>()(std::declval<U>(), std::declval<T>()))
operator()(T&& x, U&& y) const {
return !fn(sprout::forward<T>(x), sprout::forward<U>(y)) && !fn(sprout::forward<U>(y), sprout::forward<T>(x));
return !fn(SPROUT_FORWARD(T, x), SPROUT_FORWARD(U, y)) && !fn(SPROUT_FORWARD(U, y), SPROUT_FORWARD(T, x));
}
};
} // namespace detail

View file

@ -38,7 +38,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() > std::declval<U>()))
{
return sprout::forward<T>(x) > sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) > SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -38,7 +38,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() >= std::declval<U>()))
{
return sprout::forward<T>(x) >= sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) >= SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -48,9 +48,9 @@ namespace sprout {
template<typename T>
SPROUT_CONSTEXPR std::size_t
operator()(T&& v)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(sprout::to_hash(sprout::forward<T>(v))))
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(sprout::to_hash(SPROUT_FORWARD(T, v))))
{
return sprout::to_hash(sprout::forward<T>(v));
return sprout::to_hash(SPROUT_FORWARD(T, v));
}
};

View file

@ -34,7 +34,7 @@ namespace sprout {
to_hash(T&& v) {
using sprout::hash_value;
using sprout_adl::hash_value;
return hash_value(sprout::forward<T>(v));
return hash_value(SPROUT_FORWARD(T, v));
}
} // namespace sprout

View file

@ -38,7 +38,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() < std::declval<U>()))
{
return sprout::forward<T>(x) < sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) < SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -38,7 +38,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() <= std::declval<U>()))
{
return sprout::forward<T>(x) <= sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) <= SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -36,7 +36,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() && std::declval<U>()))
{
return sprout::forward<T>(x) && sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) && SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -35,7 +35,7 @@ namespace sprout {
operator()(T&& x)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(!std::declval<T>()))
{
return !sprout::forward<T>(x);
return !SPROUT_FORWARD(T, x);
}
};
} // namespace sprout

View file

@ -36,7 +36,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() || std::declval<U>()))
{
return sprout::forward<T>(x) || sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) || SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -59,25 +59,25 @@ namespace sprout {
private:
template<typename T>
Res call(T& object, Class const volatile*, Args... args) const {
return (object.*pmf_)(sprout::forward<Args>(args)...);
return (object.*pmf_)(SPROUT_FORWARD(Args, args)...);
}
template<typename T>
Res call(T& ptr, void const volatile*, Args... args) const {
return ((*ptr).*pmf_)(sprout::forward<Args>(args)...);
return ((*ptr).*pmf_)(SPROUT_FORWARD(Args, args)...);
}
public:
explicit SPROUT_CONSTEXPR mem_fn_adaptor(Res (Class::*pmf)(Args...))
: pmf_(pmf)
{}
Res operator()(Class& object, Args... args) const {
return (object.*pmf_)(sprout::forward<Args>(args)...);
return (object.*pmf_)(SPROUT_FORWARD(Args, args)...);
}
Res operator()(Class* object, Args... args) const {
return (object->*pmf_)(sprout::forward<Args>(args)...);
return (object->*pmf_)(SPROUT_FORWARD(Args, args)...);
}
template<typename T>
Res operator()(T& object, Args... args) const {
return call(object, &object, sprout::forward<Args>(args)...);
return call(object, &object, SPROUT_FORWARD(Args, args)...);
}
};
template<typename Res, typename Class, typename... Args>
@ -93,25 +93,25 @@ namespace sprout {
private:
template<typename T>
SPROUT_CONSTEXPR Res call(T const& object, Class const volatile*, Args... args) const {
return (object.*pmf_)(sprout::forward<Args>(args)...);
return (object.*pmf_)(SPROUT_FORWARD(Args, args)...);
}
template<typename T>
SPROUT_CONSTEXPR Res call(T const& ptr, void const volatile*, Args... args) const {
return ((*ptr).*pmf_)(sprout::forward<Args>(args)...);
return ((*ptr).*pmf_)(SPROUT_FORWARD(Args, args)...);
}
public:
explicit SPROUT_CONSTEXPR mem_fn_adaptor(Res (Class::*pmf)(Args...) const)
: pmf_(pmf)
{}
SPROUT_CONSTEXPR Res operator()(Class const& object, Args... args) const {
return (object.*pmf_)(sprout::forward<Args>(args)...);
return (object.*pmf_)(SPROUT_FORWARD(Args, args)...);
}
SPROUT_CONSTEXPR Res operator()(Class const* object, Args... args) const {
return (object->*pmf_)(sprout::forward<Args>(args)...);
return (object->*pmf_)(SPROUT_FORWARD(Args, args)...);
}
template<typename T>
SPROUT_CONSTEXPR Res operator()(T const& object, Args... args) const {
return call(object, &object, sprout::forward<Args>(args)...);
return call(object, &object, SPROUT_FORWARD(Args, args)...);
}
};
template<typename Res, typename Class, typename... Args>
@ -127,25 +127,25 @@ namespace sprout {
private:
template<typename T>
Res call(T& object, Class const volatile*, Args... args) const {
return (object.*pmf_)(sprout::forward<Args>(args)...);
return (object.*pmf_)(SPROUT_FORWARD(Args, args)...);
}
template<typename T>
Res call(T& ptr, void const volatile*, Args... args) const {
return ((*ptr).*pmf_)(sprout::forward<Args>(args)...);
return ((*ptr).*pmf_)(SPROUT_FORWARD(Args, args)...);
}
public:
explicit SPROUT_CONSTEXPR mem_fn_adaptor(Res (Class::*pmf)(Args...) volatile)
: pmf_(pmf)
{}
Res operator()(Class volatile& object, Args... args) const {
return (object.*pmf_)(sprout::forward<Args>(args)...);
return (object.*pmf_)(SPROUT_FORWARD(Args, args)...);
}
Res operator()(Class volatile* object, Args... args) const {
return (object->*pmf_)(sprout::forward<Args>(args)...);
return (object->*pmf_)(SPROUT_FORWARD(Args, args)...);
}
template<typename T>
Res operator()(T& object, Args... args) const {
return call(object, &object, sprout::forward<Args>(args)...);
return call(object, &object, SPROUT_FORWARD(Args, args)...);
}
};
template<typename Res, typename Class, typename... Args>
@ -161,25 +161,25 @@ namespace sprout {
private:
template<typename T>
SPROUT_CONSTEXPR Res call(T const& object, Class const volatile*, Args... args) const {
return (object.*pmf_)(sprout::forward<Args>(args)...);
return (object.*pmf_)(SPROUT_FORWARD(Args, args)...);
}
template<typename T>
SPROUT_CONSTEXPR Res call(T const& ptr, void const volatile*, Args... args) const {
return ((*ptr).*pmf_)(sprout::forward<Args>(args)...);
return ((*ptr).*pmf_)(SPROUT_FORWARD(Args, args)...);
}
public:
explicit SPROUT_CONSTEXPR mem_fn_adaptor(Res (Class::*pmf)(Args...) const volatile)
: pmf_(pmf)
{}
SPROUT_CONSTEXPR Res operator()(Class const volatile& object, Args... args) const {
return (object.*pmf_)(sprout::forward<Args>(args)...);
return (object.*pmf_)(SPROUT_FORWARD(Args, args)...);
}
SPROUT_CONSTEXPR Res operator()(Class const volatile* object, Args... args) const {
return (object->*pmf_)(sprout::forward<Args>(args)...);
return (object->*pmf_)(SPROUT_FORWARD(Args, args)...);
}
template<typename T>
SPROUT_CONSTEXPR Res operator()(T const& object, Args... args) const {
return call(object, &object, sprout::forward<Args>(args)...);
return call(object, &object, SPROUT_FORWARD(Args, args)...);
}
};

View file

@ -28,7 +28,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>()->*std::declval<U>()))
{
return sprout::forward<T>(x)->*sprout::forward<U>(y);
return SPROUT_FORWARD(T, x)->*SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -28,7 +28,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>().*std::declval<U>()))
{
return sprout::forward<T>(x).*sprout::forward<U>(y);
return SPROUT_FORWARD(T, x).*SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -38,7 +38,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() - std::declval<U>()))
{
return sprout::forward<T>(x) - sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) - SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -28,7 +28,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() -= std::declval<U>()))
{
return sprout::forward<T>(x) -= sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) -= SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -38,7 +38,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() % std::declval<U>()))
{
return sprout::forward<T>(x) % sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) % SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -28,7 +28,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() %= std::declval<U>()))
{
return sprout::forward<T>(x) %= sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) %= SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -38,7 +38,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() * std::declval<U>()))
{
return sprout::forward<T>(x) * sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) * SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -28,7 +28,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() *= std::declval<U>()))
{
return sprout::forward<T>(x) *= sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) *= SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -37,7 +37,7 @@ namespace sprout {
operator()(T&& x)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(-std::declval<T>()))
{
return -sprout::forward<T>(x);
return -SPROUT_FORWARD(T, x);
}
};
} // namespace sprout

View file

@ -46,7 +46,7 @@ namespace sprout {
template<typename T>
SPROUT_CONSTEXPR decltype(!std::declval<Predicate const&>()(std::declval<T>()))
operator()(T&& x) const {
return !fn(sprout::forward<T>(x));
return !fn(SPROUT_FORWARD(T, x));
}
};
} // namespace detail

View file

@ -47,7 +47,7 @@ namespace sprout {
template<typename T, typename U>
SPROUT_CONSTEXPR decltype(!std::declval<Predicate const&>()(std::declval<T>(), std::declval<U>()))
operator()(T&& x, U&& y) const {
return !fn(sprout::forward<T>(x), sprout::forward<U>(y));
return !fn(SPROUT_FORWARD(T, x), SPROUT_FORWARD(U, y));
}
};
} // namespace detail

View file

@ -38,7 +38,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() != std::declval<U>()))
{
return sprout::forward<T>(x) != sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) != SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -38,7 +38,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() + std::declval<U>()))
{
return sprout::forward<T>(x) + sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) + SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -28,7 +28,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() += std::declval<U>()))
{
return sprout::forward<T>(x) += sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) += SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -25,21 +25,21 @@ namespace sprout {
T value;
public:
SPROUT_CONSTEXPR binder1st_(Fn&& x, T&& y)
: op(sprout::forward<Fn>(x)), value(sprout::forward<T>(y))
: op(SPROUT_FORWARD(Fn, x)), value(SPROUT_FORWARD(T, y))
{}
template<typename Arg>
SPROUT_CONSTEXPR decltype(op(value, std::declval<Arg>()))
operator()(Arg&& x)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(op(value, std::declval<Arg>())))
{
return op(value, sprout::forward<Arg>(x));
return op(value, SPROUT_FORWARD(Arg, x));
}
};
template<typename Fn, typename T>
inline SPROUT_CONSTEXPR sprout::binder1st_<typename std::decay<Fn>::type, typename std::decay<T>::type>
bind1st_(Fn&& fn, T&& x) {
typedef sprout::binder1st_<typename std::decay<Fn>::type, typename std::decay<T>::type> type;
return type(sprout::forward<Fn>(fn), sprout::forward<T>(x));
return type(SPROUT_FORWARD(Fn, fn), SPROUT_FORWARD(T, x));
}
} // namespace sprout

View file

@ -25,21 +25,21 @@ namespace sprout {
T value;
public:
SPROUT_CONSTEXPR binder2nd_(Fn&& x, T&& y)
: op(sprout::forward<Fn>(x)), value(sprout::forward<T>(y))
: op(SPROUT_FORWARD(Fn, x)), value(SPROUT_FORWARD(T, y))
{}
template<typename Arg>
SPROUT_CONSTEXPR decltype(op(std::declval<Arg>(), value))
operator()(Arg&& x)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(op(std::declval<Arg>(), value)))
{
return op(sprout::forward<Arg>(x), value);
return op(SPROUT_FORWARD(Arg, x), value);
}
};
template<typename Fn, typename T>
inline SPROUT_CONSTEXPR sprout::binder2nd_<typename std::decay<Fn>::type, typename std::decay<T>::type>
bind2nd_(Fn&& fn, T&& x) {
typedef sprout::binder2nd_<typename std::decay<Fn>::type, typename std::decay<T>::type> type;
return type(sprout::forward<Fn>(fn), sprout::forward<T>(x));
return type(SPROUT_FORWARD(Fn, fn), SPROUT_FORWARD(T, x));
}
} // namespace sprout

View file

@ -37,7 +37,7 @@ namespace sprout {
operator()(T&& x)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(+std::declval<T>()))
{
return +sprout::forward<T>(x);
return +SPROUT_FORWARD(T, x);
}
};
} // namespace sprout

View file

@ -28,7 +28,7 @@ namespace sprout {
operator()(T&& x)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(~std::declval<T>()--))
{
return sprout::forward<T>(x)--;
return SPROUT_FORWARD(T, x)--;
}
};
} // namespace sprout

View file

@ -28,7 +28,7 @@ namespace sprout {
operator()(T&& x)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>()++))
{
return sprout::forward<T>(x)++;
return SPROUT_FORWARD(T, x)++;
}
};
} // namespace sprout

View file

@ -28,7 +28,7 @@ namespace sprout {
operator()(T&& x)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(--std::declval<T>()))
{
return --sprout::forward<T>(x);
return --SPROUT_FORWARD(T, x);
}
};
} // namespace sprout

View file

@ -28,7 +28,7 @@ namespace sprout {
operator()(T&& x)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(++std::declval<T>()))
{
return ++sprout::forward<T>(x);
return ++SPROUT_FORWARD(T, x);
}
};
} // namespace sprout

View file

@ -173,7 +173,7 @@ namespace sprout {
template<typename... Args>
SPROUT_CONSTEXPR typename std::result_of<T& (Args&&...)>::type
operator()(Args&&... args) const {
return (*t_)(sprout::forward<Args>(args)...);
return (*t_)(SPROUT_FORWARD(Args, args)...);
}
};

View file

@ -28,7 +28,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() << std::declval<U>()))
{
return sprout::forward<T>(x) << sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) << SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -28,7 +28,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() <<= std::declval<U>()))
{
return sprout::forward<T>(x) <<= sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) <<= SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -28,7 +28,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() << std::declval<U>()))
{
return sprout::forward<T>(x) >> sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) >> SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -28,7 +28,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>() >>= std::declval<U>()))
{
return sprout::forward<T>(x) >>= sprout::forward<U>(y);
return SPROUT_FORWARD(T, x) >>= SPROUT_FORWARD(U, y);
}
};
} // namespace sprout

View file

@ -28,7 +28,7 @@ namespace sprout {
operator()(T&& x, U&& y)
const SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::declval<T>()[std::declval<U>()]))
{
return sprout::forward<T>(x)[sprout::forward<U>(y)];
return SPROUT_FORWARD(T, x)[SPROUT_FORWARD(U, y)];
}
};
} // namespace sprout