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