mirror of
https://github.com/bolero-MURAKAMI/Sprout.git
synced 2025-07-16 15:14:13 +00:00
add Sprout.Weed ->* Attribute-conversion
This commit is contained in:
parent
fa3851227e
commit
3a968fa5ac
35 changed files with 369 additions and 112 deletions
|
@ -501,9 +501,8 @@ namespace sprout {
|
|||
// get
|
||||
//
|
||||
template<std::size_t I, typename T>
|
||||
SPROUT_CONSTEXPR auto get(
|
||||
T&& t
|
||||
) SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::get<I>(sprout::forward<T>(t))))
|
||||
SPROUT_CONSTEXPR auto
|
||||
get(T&& t) SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(std::get<I>(sprout::forward<T>(t))))
|
||||
-> decltype(std::get<I>(sprout::forward<T>(t)))
|
||||
{
|
||||
return std::get<I>(sprout::forward<T>(t));
|
||||
|
@ -513,41 +512,31 @@ namespace sprout {
|
|||
//
|
||||
namespace detail {
|
||||
template<std::size_t I, typename Head, typename... Tail>
|
||||
SPROUT_CONSTEXPR typename std::add_lvalue_reference<Head>::type get_helper(
|
||||
sprout::tuples::detail::tuple_impl<I, Head, Tail...>& t
|
||||
) SPROUT_NOEXCEPT
|
||||
{
|
||||
SPROUT_CONSTEXPR typename std::add_lvalue_reference<Head>::type
|
||||
get_helper(sprout::tuples::detail::tuple_impl<I, Head, Tail...>& t) SPROUT_NOEXCEPT {
|
||||
return sprout::tuples::detail::tuple_impl<I, Head, Tail...>::head(t);
|
||||
}
|
||||
template<std::size_t I, typename Head, typename... Tail>
|
||||
SPROUT_CONSTEXPR typename std::add_lvalue_reference<typename std::add_const<Head>::type>::type get_helper(
|
||||
sprout::tuples::detail::tuple_impl<I, Head, Tail...> const& t
|
||||
) SPROUT_NOEXCEPT
|
||||
{
|
||||
SPROUT_CONSTEXPR typename std::add_lvalue_reference<typename std::add_const<Head>::type>::type
|
||||
get_helper(sprout::tuples::detail::tuple_impl<I, Head, Tail...> const& t) SPROUT_NOEXCEPT {
|
||||
return sprout::tuples::detail::tuple_impl<I, Head, Tail...>::head(t);
|
||||
}
|
||||
} // namespace detail
|
||||
template<std::size_t I, typename... Types>
|
||||
SPROUT_CONSTEXPR typename sprout::tuples::tuple_element<I, sprout::tuples::tuple<Types...> >::type& get(
|
||||
sprout::tuples::tuple<Types...>& t
|
||||
) SPROUT_NOEXCEPT
|
||||
{
|
||||
SPROUT_CONSTEXPR typename sprout::tuples::tuple_element<I, sprout::tuples::tuple<Types...> >::type&
|
||||
get(sprout::tuples::tuple<Types...>& t) SPROUT_NOEXCEPT {
|
||||
return sprout::tuples::detail::get_helper<I>(t);
|
||||
}
|
||||
template<std::size_t I, typename... Types>
|
||||
SPROUT_CONSTEXPR typename sprout::tuples::tuple_element<I, sprout::tuples::tuple<Types...> >::type&& get(
|
||||
sprout::tuples::tuple<Types...>&& t
|
||||
) SPROUT_NOEXCEPT
|
||||
{
|
||||
SPROUT_CONSTEXPR typename sprout::tuples::tuple_element<I, sprout::tuples::tuple<Types...> >::type&&
|
||||
get(sprout::tuples::tuple<Types...>&& t) SPROUT_NOEXCEPT {
|
||||
return sprout::forward<typename sprout::tuples::tuple_element<I, sprout::tuples::tuple<Types...> >::type&&>(
|
||||
sprout::tuples::get<I>(t)
|
||||
);
|
||||
}
|
||||
template<std::size_t I, typename... Types>
|
||||
SPROUT_CONSTEXPR typename sprout::tuples::tuple_element<I, sprout::tuples::tuple<Types...> >::type const& get(
|
||||
sprout::tuples::tuple<Types...> const& t
|
||||
) SPROUT_NOEXCEPT
|
||||
{
|
||||
SPROUT_CONSTEXPR typename sprout::tuples::tuple_element<I, sprout::tuples::tuple<Types...> >::type const&
|
||||
get(sprout::tuples::tuple<Types...> const& t) SPROUT_NOEXCEPT {
|
||||
return sprout::tuples::detail::get_helper<I>(t);
|
||||
}
|
||||
} // namespace tuples
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue