Проверка размеров происходит только тогда, когда макрос NDEBUG
не определен. Обычно это означает отладочную сборку.
Пример без NDEBUG
, где проверки успешно отменяют программу:
g++ test.cpp -o test -I /usr/include/eigen3 && ./test
test: /usr/include/eigen3/Eigen/src/Core/ProductBase.h:102: Eigen::ProductBase<Derived, Lhs, Rhs>::ProductBase(const Lhs&, const Rhs&) [with Derived = Eigen::GeneralProduct<Eigen::Matrix<float, -1, -1>, Eigen::Matrix<float, -1, -1>, 5>; Lhs = Eigen::Matrix<float, -1, -1>; Rhs = Eigen::Matrix<float, -1, -1>]: Assertion `a_lhs.cols() == a_rhs.rows() && "invalid matrix product" && "if you wanted a coeff-wise or a dot product use the respective explicit functions"' failed.
Aborted (core dumped)
И с NDEBUG
:
g++ test.cpp -o test -I /usr/include/eigen3 -DNDEBUG && ./test
EA:
1 2
2 3
3 4
EB:
1 2
2 3
3 4
EC:
5 8
8 13
11 18