リビジョン | 5251 (tree) |
---|---|
日時 | 2017-10-11 17:22:21 |
作者 | bolero-murakami |
(メッセージはありません)
@@ -24,7 +24,7 @@ | ||
24 | 24 | template<typename F, typename... Args> |
25 | 25 | inline SPROUT_CONSTEXPR typename sprout::invoke_result<F, Args...>::type |
26 | 26 | invoke(F&& f, Args&&... args) SPROUT_NOEXCEPT_IF((sprout::is_nothrow_invocable<F, Args...>::value)) { |
27 | - return sprout::detail::invoke(sprout::forward<F>(f), sprout::forward<Args>(args)...); | |
27 | + return sprout::detail::invoke(SPROUT_FORWARD(F, f), SPROUT_FORWARD(Args, args)...); | |
28 | 28 | } |
29 | 29 | } // namespace sprout |
30 | 30 |
@@ -0,0 +1,43 @@ | ||
1 | +/*============================================================================= | |
2 | + Copyright (c) 2011-2017 Bolero MURAKAMI | |
3 | + https://github.com/bolero-MURAKAMI/Sprout | |
4 | + | |
5 | + Distributed under the Boost Software License, Version 1.0. (See accompanying | |
6 | + file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
7 | +=============================================================================*/ | |
8 | +#ifndef SPROUT_TUPLE_MAKE_FROM_TUPLE_HPP | |
9 | +#define SPROUT_TUPLE_MAKE_FROM_TUPLE_HPP | |
10 | + | |
11 | +#include <type_traits> | |
12 | +#include <sprout/config.hpp> | |
13 | +#include <sprout/tuple/tuple/tuple.hpp> | |
14 | +#include <sprout/tuple/tuple/get.hpp> | |
15 | +#include <sprout/tuple/indexes.hpp> | |
16 | +#include <sprout/utility/forward.hpp> | |
17 | + | |
18 | +namespace sprout { | |
19 | + namespace tuples { | |
20 | + // | |
21 | + // make_from_tuple | |
22 | + // | |
23 | + namespace detail { | |
24 | + template<typename T, typename Tuple, sprout::index_t... Indexes> | |
25 | + inline SPROUT_CONSTEXPR T | |
26 | + make_from_tuple_impl(Tuple&& t, sprout::index_tuple<Indexes...>) { | |
27 | + return T(sprout::get<Indexes>(SPROUT_FORWARD(Tuple, t))...); | |
28 | + } | |
29 | + } // namespace detail | |
30 | + template<typename T, typename Tuple> | |
31 | + inline SPROUT_CONSTEXPR T | |
32 | + make_from_tuple(Tuple&& t) { | |
33 | + return sprout::tuples::detail::make_from_tuple_impl<T>( | |
34 | + SPROUT_FORWARD(Tuple, t), | |
35 | + sprout::tuple_indexes<typename std::remove_reference<Tuple>::type>::make() | |
36 | + ); | |
37 | + } | |
38 | + } // namespace tuples | |
39 | + | |
40 | + using sprout::tuples::make_from_tuple; | |
41 | +} // namespace sprout | |
42 | + | |
43 | +#endif // #ifndef SPROUT_TUPLE_MAKE_FROM_TUPLE_HPP |
@@ -14,6 +14,7 @@ | ||
14 | 14 | #include <sprout/tuple/metafunctions.hpp> |
15 | 15 | #include <sprout/tuple/functions.hpp> |
16 | 16 | #include <sprout/tuple/apply.hpp> |
17 | +#include <sprout/tuple/make_from_tuple.hpp> | |
17 | 18 | #include <sprout/tuple/fused.hpp> |
18 | 19 | #include <sprout/tuple/flex.hpp> |
19 | 20 |
@@ -20,31 +20,31 @@ | ||
20 | 20 | template<typename F, typename... Args> |
21 | 21 | inline SPROUT_CONSTEXPR decltype(std::declval<F>()(std::declval<Args>()...)) |
22 | 22 | invoke(F&& f, Args&&... args) SPROUT_NOEXCEPT_IF_EXPR(std::declval<F>()(std::declval<Args>()...)) { |
23 | - return sprout::forward<F>(f)(sprout::forward<Args>(args)...); | |
23 | + return SPROUT_FORWARD(F, f)(SPROUT_FORWARD(Args, args)...); | |
24 | 24 | } |
25 | 25 | |
26 | 26 | template<typename Base, typename T, typename Derived> |
27 | 27 | inline SPROUT_CONSTEXPR decltype(std::declval<Derived>().*(std::declval<T Base::*>())) |
28 | 28 | invoke(T Base::* pm, Derived&& d) SPROUT_NOEXCEPT_IF_EXPR(std::declval<Derived>().*(std::declval<T Base::*>())) { |
29 | - return sprout::forward<Derived>(d).*(pm); | |
29 | + return SPROUT_FORWARD(Derived, d).*(pm); | |
30 | 30 | } |
31 | 31 | |
32 | 32 | template<typename PMD, typename Pointer> |
33 | 33 | inline SPROUT_CONSTEXPR decltype((*std::declval<Pointer>()).*(std::declval<PMD>())) |
34 | 34 | invoke(PMD&& pmd, Pointer&& ptr) SPROUT_NOEXCEPT_IF_EXPR((*std::declval<Pointer>()).*(std::declval<PMD>())) { |
35 | - return sprout::forward<Pointer>(ptr).*(sprout::forward<PMD>(pmd)); | |
35 | + return SPROUT_FORWARD(Pointer, ptr).*(SPROUT_FORWARD(PMD, pmd)); | |
36 | 36 | } |
37 | 37 | |
38 | 38 | template<typename Base, typename T, typename Derived, typename... Args> |
39 | 39 | inline SPROUT_CONSTEXPR decltype((std::declval<Derived>().*(std::declval<T Base::*>()))(std::declval<Args>()...)) |
40 | 40 | invoke(T Base::* pm, Derived&& d, Args&&... args) SPROUT_NOEXCEPT_IF_EXPR((std::declval<Derived>().*(std::declval<T Base::*>()))(std::declval<Args>()...)) { |
41 | - return (sprout::forward<Derived>(d).*(pm))(sprout::forward<Args>(args)...); | |
41 | + return (SPROUT_FORWARD(Derived, d).*(pm))(SPROUT_FORWARD(Args, args)...); | |
42 | 42 | } |
43 | 43 | |
44 | 44 | template<typename PMF, typename Pointer, typename... Args> |
45 | 45 | inline SPROUT_CONSTEXPR decltype(((*std::declval<Pointer>()).*(std::declval<PMF>()))(std::declval<Args>()...)) |
46 | 46 | invoke(PMF&& pmf, Pointer&& ptr, Args&&... args) SPROUT_NOEXCEPT_IF_EXPR(((*std::declval<Pointer>()).*(std::declval<PMF>()))(std::declval<Args>()...)) { |
47 | - return (sprout::forward<Pointer>(ptr).*(sprout::forward<PMF>(pmf)))(sprout::forward<Args>(args)...); | |
47 | + return (SPROUT_FORWARD(Pointer, ptr).*(SPROUT_FORWARD(PMF, pmf)))(SPROUT_FORWARD(Args, args)...); | |
48 | 48 | } |
49 | 49 | |
50 | 50 | template<typename R, typename F, typename... Args> |