mirror of
https://github.com/bolero-MURAKAMI/Sprout.git
synced 2025-07-14 15:04:09 +00:00
fix pack_get order
This commit is contained in:
parent
37e5f52e4c
commit
eb2918d065
2 changed files with 76 additions and 67 deletions
|
@ -36,30 +36,44 @@ namespace sprout {
|
|||
// pack_get
|
||||
//
|
||||
namespace detail {
|
||||
template<
|
||||
std::size_t I, typename R, typename Head, typename... Tail,
|
||||
typename sprout::enabler_if<I == 0>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR R
|
||||
pack_get_impl(Head&& head, Tail&&...) {
|
||||
return sprout::forward<Head>(head);
|
||||
}
|
||||
template<
|
||||
std::size_t I, typename R, typename Head, typename... Tail,
|
||||
typename sprout::enabler_if<I != 0>::type = sprout::enabler
|
||||
>
|
||||
inline SPROUT_CONSTEXPR R
|
||||
pack_get_impl(Head&&, Tail&&... tail) {
|
||||
return sprout::detail::pack_get_impl<I - 1, R>(sprout::forward<Tail>(tail)...);
|
||||
}
|
||||
// template<
|
||||
// std::size_t I, typename R, typename Head, typename... Tail,
|
||||
// typename sprout::enabler_if<I == 0>::type = sprout::enabler
|
||||
// >
|
||||
// inline SPROUT_CONSTEXPR R
|
||||
// pack_get_impl(Head&& head, Tail&&...) {
|
||||
// return sprout::forward<Head>(head);
|
||||
// }
|
||||
// template<
|
||||
// std::size_t I, typename R, typename Head, typename... Tail,
|
||||
// typename sprout::enabler_if<I != 0>::type = sprout::enabler
|
||||
// >
|
||||
// inline SPROUT_CONSTEXPR R
|
||||
// pack_get_impl(Head&&, Tail&&... tail) {
|
||||
// return sprout::detail::pack_get_impl<I - 1, R>(sprout::forward<Tail>(tail)...);
|
||||
// }
|
||||
|
||||
template<typename Tup>
|
||||
struct pack_get_helper;
|
||||
template<typename... Args>
|
||||
struct pack_get_helper<sprout::types::type_tuple<Args...> > {
|
||||
template<typename T>
|
||||
static SPROUT_CONSTEXPR T&&
|
||||
eval(Args&&..., T&& t, ...) {
|
||||
return sprout::forward<T>(t);
|
||||
}
|
||||
};
|
||||
} // namespace detail
|
||||
template<std::size_t I, typename... Args>
|
||||
inline SPROUT_CONSTEXPR typename sprout::pack_element<I, Args&&...>::type
|
||||
pack_get(Args&&... args) {
|
||||
return sprout::detail::pack_get_impl<
|
||||
I,
|
||||
typename sprout::pack_element<I, Args&&...>::type
|
||||
>(sprout::forward<Args>(args)...);
|
||||
return sprout::detail::pack_get_helper<
|
||||
typename sprout::types::detail::tuple_take<I, sprout::types::type_tuple<Args...> >::type
|
||||
>::eval(sprout::forward<Args>(args)...);
|
||||
// return sprout::detail::pack_get_impl<
|
||||
// I,
|
||||
// typename sprout::pack_element<I, Args&&...>::type
|
||||
// >(sprout::forward<Args>(args)...);
|
||||
}
|
||||
} // namespace sprout
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue