24#define SEQAN_NOT_POD "If you are not going to insert a POD type, use std::tuple instead."
27template <
typename... types>
49template <
typename type0,
typename... types>
52 static_assert(std::is_standard_layout_v<type0> && std::is_trivial_v<type0>, SEQAN_NOT_POD);
67 constexpr pod_tuple(type0 v0, types... args) noexcept : _head{v0}, _tail{args...}
117template <
typename type0>
120 static_assert(std::is_standard_layout_v<type0> && std::is_trivial_v<type0>, SEQAN_NOT_POD);
134 return _head == rhs._head;
140 return _head != rhs._head;
146 return _head < rhs._head;
152 return _head > rhs._head;
158 return _head <= rhs._head;
164 return _head >= rhs._head;
173template <
typename... types>
186 requires (i <
sizeof...(types))
188 if constexpr (i == 0)
198 requires (i <
sizeof...(types))
200 if constexpr (i == 0)
211 requires (i <
sizeof...(types))
213 if constexpr (i == 0)
214 return std::move(t._head);
223 requires (i <
sizeof...(types))
225 if constexpr (i == 0)
226 return std::move(t._head);
242template <
typename type,
typename... arg_types>
251template <
typename type,
typename... arg_types>
260template <
typename type,
typename... arg_types>
269template <
typename type,
typename... arg_types>
285 requires (i <
sizeof...(types))
287 return seqan3::get<i>(t);
292 requires (i <
sizeof...(types))
294 return seqan3::get<i>(t);
299 requires (i <
sizeof...(types))
301 return seqan3::get<i>(std::move(t));
306 requires (i <
sizeof...(types))
308 return seqan3::get<i>(std::move(t));
311template <
typename type,
typename... types>
315 return seqan3::get<type>(t);
318template <
typename type,
typename... types>
322 return seqan3::get<type>(t);
325template <
typename type,
typename... types>
329 return seqan3::get<type>(std::move(t));
332template <
typename type,
typename... types>
336 return seqan3::get<type>(std::move(t));
345template <
std::size_t i,
template <
typename...>
typename t,
typename... types>
347struct tuple_element<i, t<types...>>
358template <
template <
typename...>
typename t,
typename... types>
constexpr ptrdiff_t find
Get the index of the first occurrence of a type in a pack.
Definition type_pack/traits.hpp:182
constexpr ptrdiff_t count
Count the occurrences of a type in a pack.
Definition type_pack/traits.hpp:164
typename decltype(detail::at< idx, pack_t... >())::type at
Return the type at given index from the type pack.
Definition type_pack/traits.hpp:248
The main SeqAn3 namespace.
Definition aligned_sequence_concept.hpp:29
constexpr auto const & get(configuration< configs_t... > const &config) noexcept
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition configuration.hpp:415
SeqAn specific customisations in the standard namespace.
constexpr bool operator>=(pod_tuple const &rhs) const noexcept
Checks whether *this is greater than or equal to rhs.
Definition pod_tuple.hpp:106
constexpr bool operator!=(pod_tuple const &rhs) const noexcept
Checks whether *this is not equal to rhs.
Definition pod_tuple.hpp:82
constexpr bool operator<=(pod_tuple const &rhs) const noexcept
Checks whether *this is less than or equal to rhs.
Definition pod_tuple.hpp:100
constexpr bool operator==(pod_tuple const &rhs) const noexcept
Checks whether *this is equal to rhs.
Definition pod_tuple.hpp:76
constexpr bool operator<(pod_tuple const &rhs) const noexcept
Checks whether *this is less than rhs.
Definition pod_tuple.hpp:88
constexpr bool operator>(pod_tuple const &rhs) const noexcept
Checks whether *this is greater than rhs.
Definition pod_tuple.hpp:94
constexpr bool operator<=(pod_tuple const &rhs) const noexcept
Checks whether *this is less than or equal to rhs.
Definition pod_tuple.hpp:156
constexpr bool operator>(pod_tuple const &rhs) const noexcept
Checks whether *this is greater than rhs.
Definition pod_tuple.hpp:150
constexpr bool operator>=(pod_tuple const &rhs) const noexcept
Checks whether *this is greater than or equal to rhs.
Definition pod_tuple.hpp:162
constexpr bool operator!=(pod_tuple const &rhs) const noexcept
Checks whether *this is not equal to rhs.
Definition pod_tuple.hpp:138
constexpr bool operator==(pod_tuple const &rhs) const noexcept
Checks whether *this is equal to rhs.
Definition pod_tuple.hpp:132
constexpr bool operator<(pod_tuple const &rhs) const noexcept
Checks whether *this is less than rhs.
Definition pod_tuple.hpp:144
Definition pod_tuple.hpp:29
constexpr auto && get(seqan3::pod_tuple< types... > &&t) noexcept
The same as std::get on a std::tuple.
Definition pod_tuple.hpp:210
constexpr auto & get(seqan3::pod_tuple< arg_types... > &t) noexcept
The same as std::get on a std::tuple.
Definition pod_tuple.hpp:243
constexpr auto const & get(seqan3::pod_tuple< types... > const &t) noexcept
The same as std::get on a std::tuple.
Definition pod_tuple.hpp:197
constexpr auto & get(seqan3::pod_tuple< types... > &t) noexcept
The same as std::get on a std::tuple.
Definition pod_tuple.hpp:185
constexpr auto const && get(seqan3::pod_tuple< types... > const &&t) noexcept
The same as std::get on a std::tuple.
Definition pod_tuple.hpp:222
constexpr auto const && get(seqan3::pod_tuple< arg_types... > const &&t) noexcept
The same as std::get on a std::tuple.
Definition pod_tuple.hpp:270
constexpr auto && get(seqan3::pod_tuple< arg_types... > &&t) noexcept
The same as std::get on a std::tuple.
Definition pod_tuple.hpp:261
pod_tuple(types &&...) -> pod_tuple< types... >
User defined deduction guide enables easy use.
constexpr auto const & get(seqan3::pod_tuple< arg_types... > const &t) noexcept
The same as std::get on a std::tuple.
Definition pod_tuple.hpp:252
seqan3::pack_traits::at< i, types... > type
Element type.
Definition pod_tuple.hpp:350
Provides various traits for template packs.