mirror of
https://github.com/bolero-MURAKAMI/Sprout
synced 2025-08-03 12:49:50 +00:00
add typed sprout::get
This commit is contained in:
parent
530bc92d0c
commit
84b6d5d994
9 changed files with 190 additions and 4 deletions
|
@ -19,6 +19,9 @@
|
|||
#include <sprout/tuple/tuple/tuple_element.hpp>
|
||||
#include <sprout/tuple/tuple/tuple_traits.hpp>
|
||||
#include <sprout/tuple/tuple/tuple_access_traits.hpp>
|
||||
#include <sprout/type/algorithm/find_index.hpp>
|
||||
#include <sprout/type/algorithm/count.hpp>
|
||||
#include <sprout/type_traits/remove_cvref.hpp>
|
||||
#include <sprout/adl/not_found.hpp>
|
||||
|
||||
namespace sprout {
|
||||
|
@ -107,6 +110,18 @@ namespace sprout {
|
|||
return sprout_tuple_detail::call_tuple_get<I>(SPROUT_FORWARD(T, t));
|
||||
}
|
||||
|
||||
//
|
||||
// get
|
||||
//
|
||||
template<typename Type, typename T>
|
||||
inline SPROUT_CONSTEXPR decltype(sprout::tuples::get<(sprout::types::find_index<typename sprout::remove_cvref<T>::type, Type>::value)>(std::declval<T>()))
|
||||
get(T&& t)
|
||||
SPROUT_NOEXCEPT_IF_EXPR(sprout::tuples::get<(sprout::types::find_index<typename sprout::remove_cvref<T>::type, Type>::value)>(std::declval<T>()))
|
||||
{
|
||||
static_assert(sprout::types::count<typename sprout::remove_cvref<T>::type, Type>::value == 1, "Requires: The type 'Type' occurs exactly once in type list.");
|
||||
return sprout::tuples::get<(sprout::types::find_index<typename sprout::remove_cvref<T>::type, Type>::value)>(SPROUT_FORWARD(T, t));
|
||||
}
|
||||
|
||||
//
|
||||
// nested_get
|
||||
//
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue