Missing operators for `SkewSymmetricMatrix3`
### Summary Working with `SkewSymmetricMatrix3` shows that some operators are not implemented yet. ### Environment - **Operating System** : Linux - **Architecture** : x64 - **Eigen Version** : master - **Compiler Version** : Gcc11.4 ### Minimal Example The following code ([godbolt](https://godbolt.org/z/Ghf8Gdn1P)) works as expected but requires the usage of `.toDenseMatrix()` in many places due to missing implementation of operations. ```cpp #include <Eigen/Dense> using namespace Eigen; int main() { Matrix3d A = Matrix3d::Random(); Vector3d b = Vector3d::Random(); // error: no match for ‘operator-’ (operand types are ‘Eigen::Matrix3d’ {aka ‘Eigen::Matrix<double, 3, 3>’} and ‘Eigen::SkewSymmetricMatrix3<double>’) // Matrix3d c1 = A - SkewSymmetricMatrix3<double>(A * b); Matrix3d c1 = A - SkewSymmetricMatrix3<double>(A * b).toDenseMatrix(); // error: no match for ‘operator-’ (operand types are ‘const Eigen::Product<Eigen::Matrix<double, 3, 3>, Eigen::SkewSymmetricMatrix3<double>, 1>’ and ‘Eigen::SkewSymmetricMatrix3<double>’) // Matrix3d c2 = A * SkewSymmetricMatrix3<double>(b) // - SkewSymmetricMatrix3<double>(A * b); Matrix3d c2 = A * SkewSymmetricMatrix3<double>(b) - SkewSymmetricMatrix3<double>(A * b).toDenseMatrix(); // error: no match for ‘operator-’ (operand types are ‘Eigen::Product<Eigen::SkewSymmetricMatrix3<double>, Eigen::Matrix<double, 3, 3>, 1>’ and ‘Eigen::SkewSymmetricMatrix3<double>’) // Matrix3d c3 = SkewSymmetricMatrix3<double>(b) * A // - SkewSymmetricMatrix3<double>(A * b); Matrix3d c3 = SkewSymmetricMatrix3<double>(b) * A - SkewSymmetricMatrix3<double>(A * b).toDenseMatrix(); } ``` ### Steps to reproduce Trying to compile the expressions without `.toDenseMatrix()` leads to a compilation error. ### What is the current *bug* behavior? Important operators are not implemented: - error: no match for ‘operator-’ (operand types are ‘Eigen::Matrix3d’ {aka ‘Eigen::Matrix<double, 3, 3>’} and ‘Eigen::SkewSymmetricMatrix3<double>’) - error: no match for ‘operator-’ (operand types are ‘const Eigen::Product<Eigen::Matrix<double, 3, 3>, Eigen::SkewSymmetricMatrix3<double>, 1>’ and ‘Eigen::SkewSymmetricMatrix3<double>’) - error: no match for ‘operator-’ (operand types are ‘Eigen::Product<Eigen::SkewSymmetricMatrix3<double>, Eigen::Matrix<double, 3, 3>, 1>’ and ‘Eigen::SkewSymmetricMatrix3<double>’) ### What is the expected *correct* behavior? The simple expressions should compile without using `.toDenseMatrix()`.
issue