Skip to content

Commit 5290f6b

Browse files
committed
fixed multiply templates
1 parent fb619c0 commit 5290f6b

File tree

3 files changed

+33
-34
lines changed

3 files changed

+33
-34
lines changed

stan/math/fwd/fun/multiply.hpp

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,19 @@ namespace stan {
1212
namespace math {
1313

1414
template <typename Mat1, typename Mat2,
15-
typename = require_all_eigen_vt<is_fvar, Mat1, Mat2>,
16-
typename = require_same_vt<Mat1, Mat2>,
17-
typename = require_not_eigen_row_and_col_t<Mat1, Mat2>,
18-
unsigned int = 0>
15+
require_all_eigen_vt<is_fvar, Mat1, Mat2>* = nullptr,
16+
require_same_vt<Mat1, Mat2>* = nullptr,
17+
require_not_eigen_row_and_col_t<Mat1, Mat2>* = nullptr>
1918
inline auto multiply(const Mat1& m1, const Mat2& m2) {
2019
check_size_match("multiply", "Columns of m1", m1.cols(), "Rows of m2",
2120
m2.rows());
2221
return m1 * m2;
2322
}
2423

2524
template <typename Mat1, typename Mat2,
26-
typename = require_eigen_vt<is_fvar, Mat1>,
27-
typename = require_eigen_vt<std::is_floating_point, Mat2>,
28-
typename = require_not_eigen_row_and_col_t<Mat1, Mat2>, int = 0>
25+
require_eigen_vt<is_fvar, Mat1>* = nullptr,
26+
require_eigen_vt<std::is_floating_point, Mat2>* = nullptr,
27+
require_not_eigen_row_and_col_t<Mat1, Mat2>* = nullptr>
2928
inline auto multiply(const Mat1& m1, const Mat2& m2) {
3029
check_size_match("multiply", "Columns of m1", m1.cols(), "Rows of m2",
3130
m2.rows());
@@ -44,9 +43,9 @@ inline auto multiply(const Mat1& m1, const Mat2& m2) {
4443
}
4544

4645
template <typename Mat1, typename Mat2,
47-
typename = require_eigen_vt<std::is_floating_point, Mat1>,
48-
typename = require_eigen_vt<is_fvar, Mat2>,
49-
typename = require_not_eigen_row_and_col_t<Mat1, Mat2>, char = 0>
46+
require_eigen_vt<std::is_floating_point, Mat1>* = nullptr,
47+
require_eigen_vt<is_fvar, Mat2>* = nullptr,
48+
require_not_eigen_row_and_col_t<Mat1, Mat2>* = nullptr>
5049
inline auto multiply(const Mat1& m1, const Mat2& m2) {
5150
check_size_match("multiply", "Columns of m1", m1.cols(), "Rows of m2",
5251
m2.rows());

stan/math/prim/fun/multiply.hpp

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ namespace math {
2323
* @param c scalar
2424
* @return product of matrix and scalar
2525
*/
26-
template <typename Mat, typename Scal, typename = require_eigen_t<Mat>,
27-
typename = require_stan_scalar_t<Scal>>
26+
template <typename Mat, typename Scal, require_eigen_t<Mat>* = nullptr,
27+
require_stan_scalar_t<Scal>* = nullptr>
2828
inline auto multiply(const Mat& m, Scal c) {
2929
return (c * m).eval();
3030
}
@@ -39,8 +39,8 @@ inline auto multiply(const Mat& m, Scal c) {
3939
* @param m matrix
4040
* @return product of scalar and matrix
4141
*/
42-
template <typename Scal, typename Mat, typename = require_stan_scalar_t<Scal>,
43-
typename = require_eigen_t<Mat>>
42+
template <typename Scal, typename Mat, require_stan_scalar_t<Scal>* = nullptr,
43+
require_eigen_t<Mat>* = nullptr>
4444
inline auto multiply(Scal c, const Mat& m) {
4545
return (c * m).eval();
4646
}
@@ -60,10 +60,10 @@ inline auto multiply(Scal c, const Mat& m) {
6060
* not match the number of rows of m2.
6161
*/
6262
template <typename Mat1, typename Mat2,
63-
typename = require_all_eigen_vt<std::is_arithmetic, Mat1, Mat2>,
64-
typename = require_any_not_same_t<double, value_type_t<Mat1>,
65-
value_type_t<Mat2>>,
66-
typename = require_not_eigen_row_and_col_t<Mat1, Mat2>>
63+
require_all_eigen_vt<std::is_arithmetic, Mat1, Mat2>* = nullptr,
64+
require_any_not_same_t<double, value_type_t<Mat1>,
65+
value_type_t<Mat2>>* = nullptr,
66+
require_not_eigen_row_and_col_t<Mat1, Mat2>* = nullptr>
6767
inline auto multiply(const Mat1& m1, const Mat2& m2) {
6868
check_size_match("multiply", "Columns of m1", m1.cols(), "Rows of m2",
6969
m2.rows());
@@ -86,10 +86,10 @@ inline auto multiply(const Mat1& m1, const Mat2& m2) {
8686
* not match the number of rows of m2.
8787
*/
8888
template <typename Mat1, typename Mat2,
89-
typename = require_all_eigen_t<Mat1, Mat2>,
90-
typename
91-
= require_all_same_t<double, value_type_t<Mat1>, value_type_t<Mat2>>,
92-
typename = require_not_eigen_row_and_col_t<Mat1, Mat2>>
89+
require_all_eigen_t<Mat1, Mat2>* = nullptr,
90+
require_all_same_t<double, value_type_t<Mat1>,
91+
value_type_t<Mat2>>* = nullptr,
92+
require_not_eigen_row_and_col_t<Mat1, Mat2>* = nullptr>
9393
inline auto multiply(const Mat1& m1, const Mat2& m2)
9494
-> decltype((m1 * m2).eval()) {
9595
check_size_match("multiply", "Columns of m1", m1.cols(), "Rows of m2",
@@ -124,9 +124,9 @@ inline auto multiply(const Mat1& m1, const Mat2& m2)
124124
* @throw <code>std::invalid_argument</code> if rv and v are not the same size
125125
*/
126126
template <typename RowVec, typename ColVec,
127-
typename
128-
= require_all_not_var_t<scalar_type_t<RowVec>, scalar_type_t<ColVec>>,
129-
typename = require_eigen_row_and_col_t<RowVec, ColVec>>
127+
require_all_not_var_t<scalar_type_t<RowVec>,
128+
scalar_type_t<ColVec>>* = nullptr,
129+
require_eigen_row_and_col_t<RowVec, ColVec>* = nullptr>
130130
inline auto multiply(const RowVec& rv, const ColVec& v) {
131131
check_matching_sizes("multiply", "rv", rv, "v", v);
132132
return dot_product(rv, v);
@@ -142,7 +142,7 @@ inline auto multiply(const RowVec& rv, const ColVec& v) {
142142
* @return product
143143
*/
144144
template <typename Scalar1, typename Scalar2,
145-
typename = require_all_stan_scalar_t<Scalar1, Scalar2>>
145+
require_all_stan_scalar_t<Scalar1, Scalar2>* = nullptr>
146146
inline return_type_t<Scalar1, Scalar2> multiply(Scalar1 m, Scalar2 c) {
147147
return c * m;
148148
}

stan/math/rev/fun/multiply.hpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -555,10 +555,10 @@ class multiply_mat_vari<Ta, 1, Ca, double, 1> : public vari {
555555
* @param[in] B Matrix
556556
* @return Product of scalar and matrix.
557557
*/
558-
template <
559-
typename Mat1, typename Mat2, typename = require_all_eigen_t<Mat1, Mat2>,
560-
typename = require_any_eigen_vt<is_var, Mat1, Mat2>,
561-
typename = require_not_eigen_row_and_col_t<Mat1, Mat2>, typename = void>
558+
template <typename Mat1, typename Mat2,
559+
require_all_eigen_t<Mat1, Mat2>* = nullptr,
560+
require_any_eigen_vt<is_var, Mat1, Mat2>* = nullptr,
561+
require_not_eigen_row_and_col_t<Mat1, Mat2>* = nullptr>
562562
inline auto multiply(const Mat1& A, const Mat2& B) {
563563
using Ta = value_type_t<Mat1>;
564564
using Tb = value_type_t<Mat2>;
@@ -590,10 +590,10 @@ inline auto multiply(const Mat1& A, const Mat2& B) {
590590
* @param[in] B Column vector
591591
* @return Scalar product of row vector and vector
592592
*/
593-
template <typename RowVec, typename ColVec,
594-
typename
595-
= require_any_var_t<value_type_t<RowVec>, value_type_t<ColVec>>,
596-
typename = require_eigen_row_and_col_t<RowVec, ColVec>>
593+
template <
594+
typename RowVec, typename ColVec,
595+
require_any_var_t<value_type_t<RowVec>, value_type_t<ColVec>>* = nullptr,
596+
require_eigen_row_and_col_t<RowVec, ColVec>* = nullptr>
597597
inline var multiply(const RowVec& A, const ColVec& B) {
598598
using RowVecScalar = value_type_t<RowVec>;
599599
using ColVecScalar = value_type_t<ColVec>;

0 commit comments

Comments
 (0)