1#ifndef STAN_MATH_PRIM_FUN_VALUE_OF_REC_HPP
2#define STAN_MATH_PRIM_FUN_VALUE_OF_REC_HPP
15template <
typename Tuple, require_tuple_t<Tuple>* =
nullptr>
18template <
typename T, require_not_same_t<
double, T>* =
nullptr>
19inline std::vector<promote_scalar_t<double, T>>
value_of_rec(
20 const std::vector<T>& x);
37template <
typename T, require_stan_scalar_t<T> =
nullptr>
39 return static_cast<double>(x);
53inline double constexpr value_of_rec(
double x)
noexcept {
return x; }
63inline std::complex<double>
value_of_rec(
const std::complex<T>& x) {
78template <
typename T, require_std_vector_t<T>* =
nullptr,
79 require_vt_same<
double, T>* =
nullptr>
81 return std::forward<T>(x);
94template <
typename T, require_not_st_same<T,
double>* =
nullptr,
95 require_eigen_t<T>* =
nullptr>
99 return m.unaryExpr([](
auto x) {
return value_of_rec(x); });
116template <
typename T, require_st_same<T,
double>* =
nullptr,
117 require_eigen_t<T>* =
nullptr>
120 if constexpr (std::is_rvalue_reference_v<T&&>) {
121 return std::decay_t<T>(std::forward<T>(x));
126 return make_holder([](
auto&& m) {
return m; }, std::forward<T>(x));
140template <
typename T, require_not_same_t<
double, T>*>
142 const std::vector<T>& x) {
143 size_t x_size = x.size();
144 std::vector<promote_scalar_t<double, plain_type_t<T>>> result(x_size);
145 for (
size_t i = 0; i < x_size; i++) {
156template <
typename Tuple, require_tuple_t<Tuple>*>
163 std::forward<Tuple>(tup));
std::is_same< std::decay_t< S >, plain_type_t< std::decay_t< S > > > is_plain_type
Checks whether the template type T is an assignable type.
double value_of_rec(const fvar< T > &v)
Return the value of the specified variable.
constexpr auto make_holder_tuple(Types &&... args)
Holds ownership of rvalues and forwards lvalues into a tuple.
auto make_holder(F &&func, Args &&... args)
Constructs an expression from given arguments using given functor.
constexpr decltype(auto) apply(F &&f, Tuple &&t, PreArgs &&... pre_args)
The lgamma implementation in stan-math is based on either the reentrant safe lgamma_r implementation ...