10#include "vecmem/utils/type_traits.hpp"
11#include "vecmem/utils/types.hpp"
23template <
typename... Ts>
28 static_assert(
sizeof...(Ts) == 0,
29 "There's a coding error in vecmem::tuple!");
49template <
typename T,
typename...
Ts>
71 : m_head(parent.m_head), m_tail(parent.m_tail) {}
79 typename U,
typename...
Us,
81 vecmem::details::conjunction_v<
83 std::is_constructible<T, U &&>,
84 std::is_constructible<Ts, Us &&>...>,
97 template <
typename U,
typename...
Us,
98 std::enable_if_t<vecmem::details::conjunction_v<
99 std::is_constructible<T, U &&>,
100 std::is_constructible<Ts, Us &&>...>,
116 vecmem::details::conjunction<
123 m_head = parent.m_head;
124 m_tail = parent.m_tail;
145template <std::size_t
I,
typename...
Ts>
146VECMEM_HOST_AND_DEVICE
constexpr const auto &
get(
156template <std::size_t
I,
typename...
Ts>
165template <
typename...
Ts>
174template <
class...
Ts>
183template <std::
size_t I,
class T>
191template <std::size_t
I,
typename...
Ts>
203template <std::
size_t I,
class T>
211#include "vecmem/utils/impl/tuple.ipp"
An allocator class that wraps a memory resource.
Definition allocator.hpp:37
Main namespace for the vecmem classes/functions.
Definition atomic_ref.hpp:16
VECMEM_HOST_AND_DEVICE constexpr const auto & get(const tuple< Ts... > &t) noexcept
Get a constant element out of a tuple.
Definition tuple.ipp:58
VECMEM_HOST_AND_DEVICE constexpr tuple< std::decay_t< Ts >... > make_tuple(Ts &&... args)
Make a tuple with automatic type deduction.
Definition tuple.ipp:87
VECMEM_HOST_AND_DEVICE constexpr tuple< Ts &... > tie(Ts &... args)
Tie references to existing objects, into a tuple.
Definition tuple.ipp:81
typename tuple_element< I, T >::type tuple_element_t
Convenience accessor for the I-th element of a tuple.
Definition tuple.hpp:204
Implementation for std::negation.
Definition type_traits.hpp:91
constexpr tuple(tuple &&) noexcept=default
Default move constructor.
constexpr tuple & operator=(tuple &&) noexcept=default
Default move assignment operator.
T m_head
The first/head element of the tuple.
Definition tuple.hpp:129
VECMEM_HOST_AND_DEVICE constexpr tuple(U &&head, Us &&... tail)
Main constructor, from a list of tuple elements.
Definition tuple.hpp:86
constexpr tuple()=default
Default constructor.
VECMEM_HOST_AND_DEVICE constexpr tuple(U &&head, tuple< Us... > &&tail)
"Concatenation" constructor
Definition tuple.hpp:102
constexpr tuple(const tuple &)=default
Default copy constructor.
constexpr tuple & operator=(const tuple &)=default
Default copy assignment operator.
tuple< Ts... > m_tail
The rest of the tuple elements.
Definition tuple.hpp:131
std::decay_t< decltype(get< I >(std::declval< tuple< Ts... > >()))> type
Type of the I-th element of the specified tuple.
Definition tuple.hpp:195
Default/empty implementation for vecmem::tuple_element.
Definition tuple.hpp:184
Default tuple type.
Definition tuple.hpp:24
constexpr tuple()=default
Default constructor for the default tuple type.