27using CrtpDerived = std::remove_cvref_t<
decltype(std::declval<std::remove_cvref_t<T> &>().derived())>;
40 && std::derived_from<std::remove_cvref_t<T>, Eigen::MatrixBase<internal::CrtpDerived<T>>>;
48concept DiagonalExpression = std::derived_from<std::remove_cvref_t<T>, Eigen::DiagonalBase<std::remove_cvref_t<T>>>;
64template <
typename Scalar, MatrixExpression M>
65[[nodiscard]]
decltype(
auto)
68 if constexpr (std::is_same_v<typename std::remove_cvref_t<M>::Scalar, Scalar>)
70 return std::forward<M>(m);
74 return m.template cast<Scalar>();
79template <
typename T,
typename U>
80using ConstLike = std::conditional_t<
81 std::is_const_v<std::remove_reference_t<T>>,
82 std::remove_reference_t<U>
const,
83 std::remove_reference_t<U>>;
86template <
typename T,
typename U>
87using ForwardedLike = std::conditional_t<std::is_lvalue_reference_v<T>, ConstLike<T, U> &, ConstLike<T, U> &&>;
92template <
typename T,
typename U>
93[[nodiscard]]
constexpr ForwardedLike<T, U>
94forwardLike(U && u)
noexcept
96 return static_cast<ForwardedLike<T, U>
>(u);
A covariance as a function that stores one takes it: a MatrixExpression, or a DiagonalExpression,...
Definition Forwarding.h:56
A diagonal matrix or diagonal expression, possibly cv- or reference-qualified, such as v....
Definition Forwarding.h:48
A dense matrix or matrix expression, possibly cv- or reference-qualified: what a const Eigen::MatrixB...
Definition Forwarding.h:39