ACTS
Experiment-independent tracking
Loading...
Searching...
No Matches
detray::tuple< T, Ts... > Struct Template Reference

Recursive tuple node holding one value and the remaining tuple tail. More...

#include <detray/utils/tuple.hpp>

Inheritance diagram for detray::tuple< T, Ts... >:
[legend]
Collaboration diagram for detray::tuple< T, Ts... >:
[legend]

Public Member Functions

constexpr tuple ()=default
 Default construct the recursive tuple node when all elements allow it.
constexpr tuple (const tuple &o)=default
 Copy construct this tuple when every element is copy constructible.
template<typename U, typename... Us>
requires std::is_constructible_v<T, U &&> && std::is_constructible_v<tuple<Ts...>, Us &&...>
constexpr tuple (const tuple< U, Us... > &o)
 Construct from a tuple with element types convertible to this tuple.
constexpr tuple (tuple &&o) noexcept=default
 Move construct this tuple when every element is movable.
template<typename U, typename... Us>
requires std::is_constructible_v<T, U &&> && std::is_constructible_v<tuple<Ts...>, Us &&...>
constexpr tuple (tuple< U, Us... > &&o)
 Move construct from a tuple with compatible element types.
template<typename U, typename... Us>
requires std::is_constructible_v<T, U &&> && std::is_constructible_v<tuple<Ts...>, Us &&...> && (!(std::is_same_v<tuple, U> || (std::is_same_v<tuple, Us> || ...)))
constexpr tuple (U &&_v, Us &&..._r)
 Construct the tuple elements from individual values.
constexpr tuple & operator= (const tuple &other)=default
 Copy assign this tuple when all elements are copy assignable.
template<typename U, typename... Us>
requires (std::is_assignable_v<T &, const U &> && (std::is_assignable_v<Ts &, const Us &> && ...))
constexpr tuple & operator= (const tuple< U, Us... > &other)
 Copy assign from a tuple with compatible element types.
constexpr tuple & operator= (tuple &&other) noexcept=default
 Move assign this tuple when all elements are movable.
template<typename U, typename... Us>
requires (std::is_assignable_v<T &, U> && (std::is_assignable_v<Ts &, Us> && ...))
constexpr tuple & operator= (tuple< U, Us... > &&other)
 Move assign from a tuple with compatible element types.

Public Attributes

tuple< Ts... > r
 Remaining tuple elements.
T v
 Value stored in this tuple node.

Detailed Description

template<typename T, typename... Ts>
struct detray::tuple< T, Ts... >

Recursive tuple node holding one value and the remaining tuple tail.

Constructor & Destructor Documentation

◆ tuple() [1/5]

template<typename T, typename... Ts>
detray::tuple< T, Ts... >::tuple ( const tuple< T, Ts... > & o)
constexprdefault

Copy construct this tuple when every element is copy constructible.

Parameters
otuple to copy

◆ tuple() [2/5]

template<typename T, typename... Ts>
template<typename U, typename... Us>
requires std::is_constructible_v<T, U &&> && std::is_constructible_v<tuple<Ts...>, Us &&...>
detray::tuple< T, Ts... >::tuple ( const tuple< U, Us... > & o)
explicitconstexpr

Construct from a tuple with element types convertible to this tuple.

Template Parameters
Utype of the first source element
Ustypes of the remaining source elements
Parameters
otuple to convert from

◆ tuple() [3/5]

template<typename T, typename... Ts>
detray::tuple< T, Ts... >::tuple ( tuple< T, Ts... > && o)
constexprdefaultnoexcept

Move construct this tuple when every element is movable.

Parameters
otuple to move from

◆ tuple() [4/5]

template<typename T, typename... Ts>
template<typename U, typename... Us>
requires std::is_constructible_v<T, U &&> && std::is_constructible_v<tuple<Ts...>, Us &&...>
detray::tuple< T, Ts... >::tuple ( tuple< U, Us... > && o)
explicitconstexpr

Move construct from a tuple with compatible element types.

Template Parameters
Utype of the first source element
Ustypes of the remaining source elements
Parameters
otuple to move from

◆ tuple() [5/5]

template<typename T, typename... Ts>
template<typename U, typename... Us>
requires std::is_constructible_v<T, U &&> && std::is_constructible_v<tuple<Ts...>, Us &&...> && (!(std::is_same_v<tuple, U> || (std::is_same_v<tuple, Us> || ...)))
detray::tuple< T, Ts... >::tuple ( U && _v,
Us &&... _r )
explicitconstexpr

Construct the tuple elements from individual values.

Template Parameters
Utype of the first value
Ustypes of the remaining values
Parameters
_vvalue stored in this tuple node
_rvalues forwarded to the tuple tail

Member Function Documentation

◆ operator=() [1/4]

template<typename T, typename... Ts>
tuple & detray::tuple< T, Ts... >::operator= ( const tuple< T, Ts... > & other)
constexprdefault

Copy assign this tuple when all elements are copy assignable.

Parameters
othertuple to copy
Returns
reference to this tuple

◆ operator=() [2/4]

template<typename T, typename... Ts>
template<typename U, typename... Us>
requires (std::is_assignable_v<T &, const U &> && (std::is_assignable_v<Ts &, const Us &> && ...))
tuple & detray::tuple< T, Ts... >::operator= ( const tuple< U, Us... > & other)
constexpr

Copy assign from a tuple with compatible element types.

Template Parameters
Utype of the first source element
Ustypes of the remaining source elements
Parameters
othertuple to copy
Returns
reference to this tuple

◆ operator=() [3/4]

template<typename T, typename... Ts>
tuple & detray::tuple< T, Ts... >::operator= ( tuple< T, Ts... > && other)
constexprdefaultnoexcept

Move assign this tuple when all elements are movable.

Parameters
othertuple to move from
Returns
reference to this tuple

◆ operator=() [4/4]

template<typename T, typename... Ts>
template<typename U, typename... Us>
requires (std::is_assignable_v<T &, U> && (std::is_assignable_v<Ts &, Us> && ...))
tuple & detray::tuple< T, Ts... >::operator= ( tuple< U, Us... > && other)
constexpr

Move assign from a tuple with compatible element types.

Template Parameters
Utype of the first source element
Ustypes of the remaining source elements
Parameters
othertuple to move from
Returns
reference to this tuple