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 code is identical, and the expression remains 40 bytes
for the `abs2` sample case.

Fixes #2251
1 file changed
tree: cf8ddfa15495969e31ff04141cb112bb30fced6f
  1. .gitlab/
  2. bench/
  3. blas/
  4. ci/
  5. cmake/
  6. debug/
  7. demos/
  8. doc/
  9. Eigen/
  10. failtest/
  11. lapack/
  12. scripts/
  13. test/
  14. unsupported/
  15. .gitignore
  16. .gitlab-ci.yml
  17. .hgeol
  18. CMakeLists.txt
  19. COPYING.APACHE
  20. COPYING.BSD
  21. COPYING.GPL
  22. COPYING.LGPL
  23. COPYING.MINPACK
  24. COPYING.MPL2
  25. COPYING.README
  26. CTestConfig.cmake
  27. CTestCustom.cmake.in
  28. eigen3.pc.in
  29. INSTALL
  30. README.md
  31. signature_of_eigen3_matrix_library
README.md

Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms.

For more information go to http://eigen.tuxfamily.org/.

For pull request, bug reports, and feature requests, go to https://gitlab.com/libeigen/eigen.