mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-12 03:39:01 +08:00
Moved static assertions into the class constructor to make the code more portable
This commit is contained in:
parent
d7e3e4bb04
commit
5b95b4daf9
@ -34,22 +34,6 @@ struct traits<CwiseTernaryOp<TernaryOp, Arg1, Arg2, Arg3> > {
|
|||||||
typedef typename result_of<TernaryOp(
|
typedef typename result_of<TernaryOp(
|
||||||
const typename Arg1::Scalar&, const typename Arg2::Scalar&,
|
const typename Arg1::Scalar&, const typename Arg2::Scalar&,
|
||||||
const typename Arg3::Scalar&)>::type Scalar;
|
const typename Arg3::Scalar&)>::type Scalar;
|
||||||
EIGEN_STATIC_ASSERT(
|
|
||||||
(internal::is_same<typename internal::traits<Arg1>::StorageKind,
|
|
||||||
typename internal::traits<Arg2>::StorageKind>::value),
|
|
||||||
STORAGE_KIND_MUST_MATCH)
|
|
||||||
EIGEN_STATIC_ASSERT(
|
|
||||||
(internal::is_same<typename internal::traits<Arg1>::StorageKind,
|
|
||||||
typename internal::traits<Arg3>::StorageKind>::value),
|
|
||||||
STORAGE_KIND_MUST_MATCH)
|
|
||||||
EIGEN_STATIC_ASSERT(
|
|
||||||
(internal::is_same<typename internal::traits<Arg1>::StorageIndex,
|
|
||||||
typename internal::traits<Arg3>::StorageIndex>::value),
|
|
||||||
STORAGE_INDEX_MUST_MATCH)
|
|
||||||
EIGEN_STATIC_ASSERT(
|
|
||||||
(internal::is_same<typename internal::traits<Arg1>::StorageIndex,
|
|
||||||
typename internal::traits<Arg3>::StorageIndex>::value),
|
|
||||||
STORAGE_INDEX_MUST_MATCH)
|
|
||||||
|
|
||||||
typedef typename internal::traits<Arg1>::StorageKind StorageKind;
|
typedef typename internal::traits<Arg1>::StorageKind StorageKind;
|
||||||
typedef typename internal::traits<Arg1>::StorageIndex StorageIndex;
|
typedef typename internal::traits<Arg1>::StorageIndex StorageIndex;
|
||||||
@ -100,18 +84,8 @@ template <typename TernaryOp, typename Arg1Type, typename Arg2Type,
|
|||||||
class CwiseTernaryOp : public CwiseTernaryOpImpl<
|
class CwiseTernaryOp : public CwiseTernaryOpImpl<
|
||||||
TernaryOp, Arg1Type, Arg2Type, Arg3Type,
|
TernaryOp, Arg1Type, Arg2Type, Arg3Type,
|
||||||
typename internal::traits<Arg1Type>::StorageKind>,
|
typename internal::traits<Arg1Type>::StorageKind>,
|
||||||
internal::no_assignment_operator {
|
internal::no_assignment_operator
|
||||||
EIGEN_STATIC_ASSERT(
|
{
|
||||||
(internal::is_same<
|
|
||||||
typename internal::traits<Arg1Type>::StorageKind,
|
|
||||||
typename internal::traits<Arg2Type>::StorageKind>::value),
|
|
||||||
STORAGE_KIND_MUST_MATCH)
|
|
||||||
EIGEN_STATIC_ASSERT(
|
|
||||||
(internal::is_same<
|
|
||||||
typename internal::traits<Arg1Type>::StorageKind,
|
|
||||||
typename internal::traits<Arg3Type>::StorageKind>::value),
|
|
||||||
STORAGE_KIND_MUST_MATCH)
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef typename internal::remove_all<Arg1Type>::type Arg1;
|
typedef typename internal::remove_all<Arg1Type>::type Arg1;
|
||||||
typedef typename internal::remove_all<Arg2Type>::type Arg2;
|
typedef typename internal::remove_all<Arg2Type>::type Arg2;
|
||||||
@ -137,6 +111,17 @@ class CwiseTernaryOp : public CwiseTernaryOpImpl<
|
|||||||
// require the sizes to match
|
// require the sizes to match
|
||||||
EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(Arg1, Arg2)
|
EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(Arg1, Arg2)
|
||||||
EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(Arg1, Arg3)
|
EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(Arg1, Arg3)
|
||||||
|
|
||||||
|
// The index types should match
|
||||||
|
EIGEN_STATIC_ASSERT((internal::is_same<
|
||||||
|
typename internal::traits<Arg1Type>::StorageKind,
|
||||||
|
typename internal::traits<Arg2Type>::StorageKind>::value),
|
||||||
|
STORAGE_KIND_MUST_MATCH)
|
||||||
|
EIGEN_STATIC_ASSERT((internal::is_same<
|
||||||
|
typename internal::traits<Arg1Type>::StorageKind,
|
||||||
|
typename internal::traits<Arg3Type>::StorageKind>::value),
|
||||||
|
STORAGE_KIND_MUST_MATCH)
|
||||||
|
|
||||||
eigen_assert(a1.rows() == a2.rows() && a1.cols() == a2.cols() &&
|
eigen_assert(a1.rows() == a2.rows() && a1.cols() == a2.cols() &&
|
||||||
a1.rows() == a3.rows() && a1.cols() == a3.cols());
|
a1.rows() == a3.rows() && a1.cols() == a3.cols());
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user