mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
Make fixed-size Matrix and Array trivially copyable after C++20
Making them trivially copyable allows using std::memcpy() without undefined behaviors. Only Matrix and Array with trivially copyable DenseStorage are marked as trivially copyable with an additional type trait. As described in http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0848r3.html it requires extremely verbose SFINAE to make the special member functions of fixed-size Matrix and Array trivial, unless C++20 concepts are available to simplify the selection of trivial special member functions given template parameters. Therefore only make this feature available to compilers that support C++20 P0848R3. Fix #1855.
This commit is contained in:
committed by
David Tellenbach
parent
c4b1dd2f6b
commit
47eac21072
@@ -42,6 +42,11 @@ template<typename T> struct evaluator_traits;
|
||||
|
||||
template< typename T> struct evaluator;
|
||||
|
||||
template<typename T> struct has_trivially_copyable_storage
|
||||
{
|
||||
static const bool value = false;
|
||||
};
|
||||
|
||||
} // end namespace internal
|
||||
|
||||
template<typename T> struct NumTraits;
|
||||
|
||||
@@ -1084,6 +1084,16 @@ namespace Eigen {
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* \internal
|
||||
* \brief Macro for conditionally trivial special member functions for supporting trivially copyable types.
|
||||
* This feature is officially known as C++20's P0848R3 and is enabled on supported compilers.
|
||||
*/
|
||||
#if (EIGEN_COMP_CXXVER >= 20) && (EIGEN_COMP_GNUC_STRICT || EIGEN_COMP_MSVC_STRICT)
|
||||
#define EIGEN_COMP_HAS_P0848R3 1
|
||||
#else
|
||||
#define EIGEN_COMP_HAS_P0848R3 0
|
||||
#endif
|
||||
|
||||
/**
|
||||
* \internal
|
||||
|
||||
Reference in New Issue
Block a user