@@ -32,7 +32,7 @@ template <typename TD, typename TA, typename TB,
32
32
typename = require_all_eigen_t <TD, TA, TB>,
33
33
typename = require_all_not_var_t <value_type_t <TD>, value_type_t <TA>,
34
34
value_type_t <TB>>,
35
- typename = require_any_not_same_vt< double , TD, TA, TB>>
35
+ typename = require_any_not_eigen_vt<std::is_arithmetic , TD, TA, TB>>
36
36
inline auto trace_gen_quad_form (const TD &D, const TA &A, const TB &B) {
37
37
check_square (" trace_gen_quad_form" , " A" , A);
38
38
check_square (" trace_gen_quad_form" , " D" , D);
@@ -44,7 +44,7 @@ inline auto trace_gen_quad_form(const TD &D, const TA &A, const TB &B) {
44
44
/* *
45
45
* Return the trace of D times the quadratic form of B and A.
46
46
* That is, `trace_gen_quad_form(D, A, B) = trace(D * B' * A * B).`
47
- * This is the double-only overload to allow Eigen's expression
47
+ * This is the overload for arithmetic types to allow Eigen's expression
48
48
* templates to be used for efficiency.
49
49
*
50
50
* @tparam TD type of the first matrix or expression
@@ -60,8 +60,7 @@ inline auto trace_gen_quad_form(const TD &D, const TA &A, const TB &B) {
60
60
* be multiplied by D.
61
61
*/
62
62
template <typename TD, typename TA, typename TB,
63
- typename = require_all_eigen_t <TD, TA, TB>,
64
- typename = require_all_same_vt<double , TD, TA, TB>>
63
+ typename = require_all_eigen_vt<std::is_arithmetic, TD, TA, TB>>
65
64
inline double trace_gen_quad_form (const TD &D, const TA &A, const TB &B) {
66
65
check_square (" trace_gen_quad_form" , " A" , A);
67
66
check_square (" trace_gen_quad_form" , " D" , D);
0 commit comments