31#ifndef FENNEC_CONTAINERS_TUPLE_H
32#define FENNEC_CONTAINERS_TUPLE_H
34#include <fennec/containers/detail/_tuple.h>
60template<
typename...TypesT>
struct tuple;
63template<
size_t i,
typename...TypesT>
64constexpr typename tuple<TypesT...>::template elem_t<i>& get(tuple<TypesT...>& x) {
65 using elem_t =
typename tuple<TypesT...>::template elem_t<i>;
66 auto& it = *
static_cast<detail::_tuple_leaf<i, elem_t>*
>(&x);
70template<
size_t i,
typename...TypesT>
71constexpr const typename tuple<TypesT...>::template elem_t<i>& get(
const tuple<TypesT...>& x) {
72 using elem_t =
typename tuple<TypesT...>::template elem_t<i>;
73 const auto& it = *
static_cast<const detail::_tuple_leaf<i, elem_t>*
>(&x);
78template<
typename ...TypesT>
79struct tuple :
public detail::_tuple<make_index_metasequence_t<sizeof...(TypesT)>, TypesT...>
84 using elem_t =
typename nth_element<i, TypesT...>::type;
86 static constexpr size_t size =
sizeof...(TypesT);
88 template<
typename...ArgsT>
90 : base_t(fennec::forward<ArgsT>(args)...) {
103template<
typename...TypesT>
Gets the type of the nth element of the type sequence TypesT...
Definition type_sequences.h:91
Tuple, holds a collection of values of different types.
Definition tuple.h:80