1#ifndef ENTT_CORE_TUPLE_HPP
2#define ENTT_CORE_TUPLE_HPP
14struct is_tuple_impl: std::false_type {};
16template<
typename... Args>
17struct is_tuple_impl<std::tuple<Args...>>: std::true_type {};
27template<
typename Type>
28struct is_tuple: internal::is_tuple_impl<std::remove_cv_t<Type>> {};
34template<
typename Type>
44template<
typename Type>
46 if constexpr(std::tuple_size_v<std::remove_reference_t<Type>> == 1u) {
47 return std::get<0>(std::forward<Type>(value));
49 return std::forward<Type>(value);
57template<
typename Func>
64 template<
typename...
Args>
74 template<
typename Type>
75 constexpr decltype(
auto)
operator()(Type &&
args)
noexcept(
noexcept(std::apply(std::declval<Func &>(),
args))) {
76 return std::apply(
static_cast<Func &
>(*
this), std::forward<Type>(
args));
80 template<
typename Type>
81 constexpr decltype(
auto)
operator()(Type &&
args)
const noexcept(
noexcept(std::apply(std::declval<const Func &>(),
args))) {
82 return std::apply(
static_cast<const Func &
>(*
this), std::forward<Type>(
args));
90template<
typename Func>
constexpr bool is_tuple_v
Helper variable template.
forward_apply(Func) -> forward_apply< std::remove_reference_t< std::remove_cv_t< Func > > >
Deduction guide.
constexpr Type make_obj_using_allocator(const Allocator &allocator, Args &&...args)
Uses-allocator construction utility (waiting for C++20).
constexpr decltype(auto) unwrap_tuple(Type &&value) noexcept
Utility function to unwrap tuples of a single element.
Utility class to forward-and-apply tuple objects.
constexpr forward_apply(Args &&...args) noexcept(std::is_nothrow_constructible_v< Func, Args... >)
Constructs a forward-and-apply object.
Provides the member constant value to true if a given type is a tuple, false otherwise.