1#ifndef STAN_MATH_PRIM_FUNCTOR_TUPLE_CONCAT_HPP
2#define STAN_MATH_PRIM_FUNCTOR_TUPLE_CONCAT_HPP
20template <
typename Tuple1,
typename Tuple2, std::size_t... I1,
23 std::index_sequence<I1...> ,
24 std::index_sequence<I2...> ) {
26 std::get<I2>(std::forward<Tuple2>(y))...);
29template <
typename Tuple1,
typename Tuple2,
typename Tuple3, std::size_t... I1,
30 std::size_t... I2, std::size_t... I3>
32 std::index_sequence<I1...> ,
33 std::index_sequence<I2...> ,
34 std::index_sequence<I3...> ) {
36 std::get<I2>(std::forward<Tuple2>(y))...,
37 std::get<I3>(std::forward<Tuple3>(z))...);
46inline constexpr auto tuple_concat() noexcept {
return std::make_tuple(); }
53template <
typename Tuple>
55 return std::forward<Tuple>(x);
66template <
typename Tuple1,
typename Tuple2>
69 std::forward<Tuple1>(x), std::forward<Tuple2>(y),
70 std::make_index_sequence<std::tuple_size<std::decay_t<Tuple1>>{}>{},
71 std::make_index_sequence<std::tuple_size<std::decay_t<Tuple2>>{}>{});
85template <
typename Tuple1,
typename Tuple2,
typename Tuple3>
88 std::forward<Tuple1>(x), std::forward<Tuple2>(y), std::forward<Tuple3>(z),
89 std::make_index_sequence<std::tuple_size<std::decay_t<Tuple1>>{}>{},
90 std::make_index_sequence<std::tuple_size<std::decay_t<Tuple2>>{}>{},
91 std::make_index_sequence<std::tuple_size<std::decay_t<Tuple3>>{}>{});
105template <
typename Tuple1,
typename Tuple2,
typename... OtherTuples>
106inline auto tuple_concat(Tuple1&& x, Tuple2&& y, OtherTuples&&... args) {
108 tuple_concat(std::forward<Tuple1>(x), std::forward<Tuple2>(y)),
109 std::forward<OtherTuples>(args)...);
125template <
typename Tuple1,
typename Tuple2,
typename Tuple3,
126 typename... OtherTuples>
128 OtherTuples&&... args) {
130 tuple_concat(std::forward<Tuple1>(x), std::forward<Tuple2>(y),
131 std::forward<Tuple3>(z)),
132 std::forward<OtherTuples>(args)...);
auto constexpr tuple_concat_impl(Tuple1 &&x, Tuple2 &&y, std::index_sequence< I1... >, std::index_sequence< I2... >)
constexpr auto make_holder_tuple(Types &&... args)
Holds ownership of rvalues and forwards lvalues into a tuple.
constexpr auto tuple_concat() noexcept
Base case to pass a tuple forward.
The lgamma implementation in stan-math is based on either the reentrant safe lgamma_r implementation ...