24 #define SEQAN_NOT_POD "If you are not going to insert a POD type, use std::tuple instead."
28 template <
typename ...types>
53 template <
typename type0,
typename ...types>
56 static_assert(std::is_standard_layout_v<type0> && std::is_trivial_v<type0>, SEQAN_NOT_POD);
71 return std::tie(_head, _tail) == std::tie(rhs._head, rhs._tail);
77 return std::tie(_head, _tail) != std::tie(rhs._head, rhs._tail);
83 return std::tie(_head, _tail) < std::tie(rhs._head, rhs._tail);
89 return std::tie(_head, _tail) > std::tie(rhs._head, rhs._tail);
95 return std::tie(_head, _tail) <= std::tie(rhs._head, rhs._tail);
101 return std::tie(_head, _tail) >= std::tie(rhs._head, rhs._tail);
110 template <
typename type0>
113 static_assert(std::is_standard_layout_v<type0> && std::is_trivial_v<type0>, SEQAN_NOT_POD);
127 return _head == rhs._head;
133 return _head != rhs._head;
139 return _head < rhs._head;
145 return _head > rhs._head;
151 return _head <= rhs._head;
157 return _head >= rhs._head;
166 template <
typename ...types>
177 template <std::size_t i,
typename ...types>
180 requires (i <
sizeof...(types))
183 if constexpr (i == 0)
191 template <std::size_t i,
typename ...types>
194 requires (i <
sizeof...(types))
197 if constexpr (i == 0)
206 template <std::size_t i,
typename ...types>
209 requires (i <
sizeof...(types))
212 if constexpr (i == 0)
220 template <std::size_t i,
typename ...types>
223 requires (i <
sizeof...(types))
226 if constexpr (i == 0)
243 template <
typename type,
typename ...arg_types>
246 requires (seqan3::pack_traits::count<type, arg_types...> == 1)
254 template <
typename type,
typename ...arg_types>
257 requires (seqan3::pack_traits::count<type, arg_types...> == 1)
265 template <
typename type,
typename ...arg_types>
268 requires (seqan3::pack_traits::count<type, arg_types...> == 1)
276 template <
typename type,
typename ...arg_types>
279 requires (seqan3::pack_traits::count<type, arg_types...> == 1)
292 template <std::size_t i,
typename ...types>
294 requires (i <
sizeof...(types))
296 return seqan3::get<i>(t);
299 template <std::size_t i,
typename ...types>
301 requires (i <
sizeof...(types))
303 return seqan3::get<i>(t);
306 template <std::size_t i,
typename ...types>
308 requires (i <
sizeof...(types))
313 template <std::size_t i,
typename ...types>
315 requires (i <
sizeof...(types))
320 template <
typename type,
typename ...types>
322 requires (seqan3::pack_traits::count<type, types...> == 1)
324 return seqan3::get<type>(t);
327 template <
typename type,
typename ...types>
329 requires (seqan3::pack_traits::count<type, types...> == 1)
331 return seqan3::get<type>(t);
334 template <
typename type,
typename ...types>
336 requires (seqan3::pack_traits::count<type, types...> == 1)
341 template <
typename type,
typename ...types>
343 requires (seqan3::pack_traits::count<type, types...> == 1)
354 template <std::size_t i,
template <
typename ...>
typename t,
typename ...types>
356 requires (i <
sizeof...(types)) &&
359 struct tuple_element<i, t<types...>>
370 template <
template <
typename ...>
typename t,
typename ...types>
372 struct tuple_size<t<types...>> :
373 public std::integral_constant<std::size_t, sizeof...(types)>
constexpr ptrdiff_t find
Get the index of the first occurrence of a type in a pack.
Definition: traits.hpp:187
typename decltype(detail::at< idx, pack_t... >())::type at
Return the type at given index from the type pack.
Definition: traits.hpp:256
constexpr auto get
A view calling get on each element in a range.
Definition: elements.hpp:114
auto const move
A view that turns lvalue-references into rvalue-references.
Definition: move.hpp:74
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:429
SeqAn specific customisations in the standard namespace.
Definition: affine_cell_proxy.hpp:438
constexpr bool operator>=(pod_tuple const &rhs) const noexcept
Checks whether *this is greater than or equal to rhs.
Definition: pod_tuple.hpp:99
constexpr bool operator!=(pod_tuple const &rhs) const noexcept
Checks whether *this is not equal to rhs.
Definition: pod_tuple.hpp:75
constexpr bool operator<=(pod_tuple const &rhs) const noexcept
Checks whether *this is less than or equal to rhs.
Definition: pod_tuple.hpp:93
constexpr bool operator==(pod_tuple const &rhs) const noexcept
Checks whether *this is equal to rhs.
Definition: pod_tuple.hpp:69
constexpr bool operator<(pod_tuple const &rhs) const noexcept
Checks whether *this is less than rhs.
Definition: pod_tuple.hpp:81
constexpr bool operator>(pod_tuple const &rhs) const noexcept
Checks whether *this is greater than rhs.
Definition: pod_tuple.hpp:87
constexpr bool operator<=(pod_tuple const &rhs) const noexcept
Checks whether *this is less than or equal to rhs.
Definition: pod_tuple.hpp:149
constexpr bool operator>(pod_tuple const &rhs) const noexcept
Checks whether *this is greater than rhs.
Definition: pod_tuple.hpp:143
constexpr bool operator>=(pod_tuple const &rhs) const noexcept
Checks whether *this is greater than or equal to rhs.
Definition: pod_tuple.hpp:155
constexpr bool operator!=(pod_tuple const &rhs) const noexcept
Checks whether *this is not equal to rhs.
Definition: pod_tuple.hpp:131
constexpr bool operator==(pod_tuple const &rhs) const noexcept
Checks whether *this is equal to rhs.
Definition: pod_tuple.hpp:125
constexpr bool operator<(pod_tuple const &rhs) const noexcept
Checks whether *this is less than rhs.
Definition: pod_tuple.hpp:137
cond
Definition: pod_tuple.hpp:30
constexpr auto && get(seqan3::pod_tuple< types... > &&t) noexcept
The same as std::get on an std::tuple.
Definition: pod_tuple.hpp:207
constexpr auto & get(seqan3::pod_tuple< arg_types... > &t) noexcept
The same as std::get on an std::tuple.
Definition: pod_tuple.hpp:244
constexpr auto const & get(seqan3::pod_tuple< types... > const &t) noexcept
The same as std::get on an std::tuple.
Definition: pod_tuple.hpp:192
constexpr auto & get(seqan3::pod_tuple< types... > &t) noexcept
The same as std::get on an std::tuple.
Definition: pod_tuple.hpp:178
constexpr auto const && get(seqan3::pod_tuple< types... > const &&t) noexcept
The same as std::get on an std::tuple.
Definition: pod_tuple.hpp:221
constexpr auto const && get(seqan3::pod_tuple< arg_types... > const &&t) noexcept
The same as std::get on an std::tuple.
Definition: pod_tuple.hpp:277
constexpr auto && get(seqan3::pod_tuple< arg_types... > &&t) noexcept
The same as std::get on an std::tuple.
Definition: pod_tuple.hpp:266
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 an std::tuple.
Definition: pod_tuple.hpp:255
seqan3::pack_traits::at< i, types... > type
Element type.
Definition: pod_tuple.hpp:362
Provides C++20 additions to the type_traits header.
Provides various traits for template packs.