make fixed_size matrices conform to std::is_standard_layout
Reference issue
What does this implement/fix?
Plain matrix/array objects now conform to standard layout. You may resume your type punning with slightly more defined behavior. Also:
-
check_size_for_overflowcorrectly checks for overflow (suppresses a bunch of compiler warnings) - fixed-size objects with non-trivial scalars now use copies instead of moves
- bunch of dense storage tests which drove the above changes
Previously, as far back as Eigen 3.4 (probably further), fixed-size arrays of non-trivial scalars did not account for non-trivial, movable scalars. If we do want to take advantage of this, we would have to re-initialize every scalar that is moved. Possible, but I'll wait for someone to complain and present a compelling case before we go to the trouble of implementing it.
Additional information
Edited by Charles Schlosser