18#ifndef TRINITYCORE_TUPLES_H
19#define TRINITYCORE_TUPLES_H
25 template <
typename... Ts>
28 template <
typename... Ts>
29 constexpr bool is_tuple_v<std::tuple<Ts...>> =
true;
31 template <
typename... Ts>
34 template <
typename T,
typename... Us>
37 template <
typename T,
typename... Us>
38 constexpr bool tuple_has_type_v<T, std::tuple<Us...>> = std::disjunction_v<std::is_same<T, Us>...>;
40 template <
typename T,
typename... Us>
45 template <
class T,
class Tuple,
size_t... I>
48 return new T(std::get<I>(std::forward<Tuple>(args))...);
52 template <
class T,
class Tuple>
55 return Impl::new_from_tuple<T>(std::forward<Tuple>(args), std::make_index_sequence<std::tuple_size_v<std::remove_reference_t<Tuple>>>{});
58 template <std::
size_t I>
59 inline constexpr auto TupleElement = []<
typename Tuple>(Tuple&& tuple)
constexpr ->
decltype(
auto) {
return std::get<I>(std::forward<Tuple>(tuple)); };
T * new_from_tuple(Tuple &&args, std::index_sequence< I... >)
constexpr bool tuple_has_type_v
std::bool_constant< tuple_has_type_v< T, Us... > > tuple_has_type_t
constexpr bool is_tuple_v
std::bool_constant< is_tuple_v< Ts... > > is_tuple_t
T * new_from_tuple(Tuple &&args)
constexpr auto TupleElement