1#ifndef STAN_MATH_PRIM_META_FORWARD_AS_HPP
2#define STAN_MATH_PRIM_META_FORWARD_AS_HPP
11template <
typename T1,
typename T2>
13 return static_cast<int>(desired) == Eigen::Dynamic
14 ||
static_cast<int>(desired) ==
static_cast<int>(actual);
32template <
typename T_desired,
typename T_actual,
34 = std::enable_if_t<std::is_same<std::decay_t<T_actual>,
35 std::decay_t<T_desired>>::value
38 return std::forward<T_actual>(a);
58 typename T_desired,
typename T_actual,
60 typename = std::enable_if_t<
61 !std::is_same<std::decay<T_actual>, std::decay<T_desired>>::value
62 && !(std::is_floating_point_v<std::decay_t<
63 T_desired>> && std::is_integral_v<std::decay_t<T_actual>>)>>
65 throw std::runtime_error(
"Wrong type assumed! Please file a bug report.");
83template <
typename T_desired,
typename T_actual,
84 typename = std::enable_if_t<
85 std::is_floating_point_v<std::decay_t<
86 T_desired>> && std::is_integral_v<std::decay_t<T_actual>>>>
88 return static_cast<T_desired
>(a);
106 typename T_desired,
typename T_actual,
112 T_desired::RowsAtCompileTime,
113 std::decay_t<T_actual>::RowsAtCompileTime)
115 T_desired::ColsAtCompileTime,
116 std::decay_t<T_actual>::ColsAtCompileTime)>* =
nullptr>
118 return std::forward<T_actual>(a);
138 typename T_desired,
typename T_actual,
143 T_desired::RowsAtCompileTime,
144 std::decay_t<T_actual>::RowsAtCompileTime)
146 T_desired::ColsAtCompileTime,
147 std::decay_t<T_actual>::ColsAtCompileTime)>* =
nullptr>
148inline T_desired
forward_as(
const T_actual& a) {
149 throw std::runtime_error(
"Wrong type assumed! Please file a bug report.");
require_all_t< is_eigen< std::decay_t< Types > >... > require_all_eigen_t
Require all of the types satisfy is_eigen.
require_t< is_eigen< std::decay_t< T > > > require_eigen_t
Require type satisfies is_eigen.
require_any_not_t< is_eigen< std::decay_t< Types > >... > require_any_not_eigen_t
Require at least one of the types do not satisfy is_eigen.
typename value_type< T >::type value_type_t
Helper function for accessing underlying type.
T_actual && forward_as(T_actual &&a)
Assume which type we get.
constexpr bool eigen_static_size_match(T1 desired, T2 actual)
The lgamma implementation in stan-math is based on either the reentrant safe lgamma_r implementation ...
Check if type derives from EigenBase