Modify Unary/Binary/TernaryOp evaluators to work for non-class types.

This used to work for non-class types (e.g. raw function pointers) in Eigen 3.3. This was changed in commit 11f55b29 to optimize the evaluator:

sizeof((A-B).cwiseAbs2()) with A,B Vector4f is now 16 bytes, instead of 48 before this optimization.

though I cannot reproduce the 16 byte result. Both before the change and after, with multiple compilers/versions, I always get a result of 40 bytes.

https://godbolt.org/z/MsjTc1PGe

This change modifies the code slightly to allow non-class types. The final generated assembly code is identical, and the expression remains 40 bytes for the abs2 sample case.

Fixes #2251 (closed)

Edited by Antonio Sánchez

Merge request reports

Loading