diff --git a/cmake/modules/FindEigen3.cmake b/cmake/modules/FindEigen3.cmake index e143d5dc09..6944873f6f 100644 --- a/cmake/modules/FindEigen3.cmake +++ b/cmake/modules/FindEigen3.cmake @@ -31,7 +31,18 @@ if(NOT Eigen3_FIND_VERSION) endif(NOT Eigen3_FIND_VERSION) macro(_eigen3_check_version) - file(READ "${EIGEN3_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h" _eigen3_version_header) + # Try the Eigen 5.x location first + if(EXISTS "${EIGEN3_INCLUDE_DIR}/Eigen/Version") + file(READ "${EIGEN3_INCLUDE_DIR}/Eigen/Version" _eigen3_version_header) + # Fall back to Eigen 3.x location + elseif(EXISTS "${EIGEN3_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h") + file(READ "${EIGEN3_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h" _eigen3_version_header) + else() + # Could not locate any known Eigen version header; mark version as not OK and return. + set(EIGEN3_VERSION_OK FALSE) + message(STATUS "Could not find Eigen version header under ${EIGEN3_INCLUDE_DIR}") + return() + endif() string(REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen3_world_version_match "${_eigen3_version_header}") set(EIGEN3_WORLD_VERSION "${CMAKE_MATCH_1}") diff --git a/src/TiledArray/tensor/tensor_interface.h b/src/TiledArray/tensor/tensor_interface.h index b09dc11665..ad4ba7dc34 100644 --- a/src/TiledArray/tensor/tensor_interface.h +++ b/src/TiledArray/tensor/tensor_interface.h @@ -179,7 +179,6 @@ class TensorInterface { /// \param data The data pointer for this tensor TensorInterface(const range_type& range, pointer data) : range_(range), data_(data) { - TA_ASSERT(data); } /// Construct a new view of \c tensor @@ -188,7 +187,6 @@ class TensorInterface { /// \param data The data pointer for this tensor TensorInterface(range_type&& range, pointer data) : range_(std::move(range)), data_(data) { - TA_ASSERT(data); } template ( - std::make_tuple(matrix_type(r.extent()[0], r.extent()[1]), r))) { - TA_ASSERT(r.extent()[0] > 0); - TA_ASSERT(r.extent()[1] > 0); - } + : impl_([&]() { + TA_ASSERT(r.extent()[0] > 0); + TA_ASSERT(r.extent()[1] > 0); + return std::make_shared( + std::make_tuple(matrix_type(r.extent()[0], r.extent()[1]), r)); + }()) {} /// ctor using sparse matrix EigenSparseTile(matrix_type&& mat, const range_type& range) - : impl_(std::make_shared( - std::make_tuple(std::move(mat), range))) { - using extent_type = typename range_type::extent_type::value_type; - TA_ASSERT(static_cast(mat.rows()) == range.extent()[0]); - TA_ASSERT(static_cast(mat.cols()) == range.extent()[1]); - } + : impl_([&]() { + using extent_type = typename range_type::extent_type::value_type; + TA_ASSERT(static_cast(mat.rows()) == range.extent()[0]); + TA_ASSERT(static_cast(mat.cols()) == range.extent()[1]); + return std::make_shared( + std::make_tuple(std::move(mat), range)); + }()) {} /// ctor using sparse matrix EigenSparseTile(const matrix_type& mat, const range_type& range) - : impl_(std::make_shared(std::make_tuple(mat, range))) { - using extent_type = typename range_type::extent_type::value_type; - TA_ASSERT(static_cast(mat.rows()) == range.extent()[0]); - TA_ASSERT(static_cast(mat.cols()) == range.extent()[1]); - } + : impl_([&]() { + using extent_type = typename range_type::extent_type::value_type; + TA_ASSERT(static_cast(mat.rows()) == range.extent()[0]); + TA_ASSERT(static_cast(mat.cols()) == range.extent()[1]); + return std::make_shared(std::make_tuple(mat, range)); + }()) {} // Deep copy EigenSparseTile clone() const { @@ -683,7 +686,7 @@ struct ArchiveLoadImpl> { static inline void load(const Archive& ar, Eigen::Triplet& obj) { int row, col; T value; - ar & row & col & value; + ar& row& col& value; obj = Eigen::Triplet(row, col, value); } }; @@ -691,7 +694,7 @@ struct ArchiveLoadImpl> { template struct ArchiveStoreImpl> { static inline void store(const Archive& ar, const Eigen::Triplet& obj) { - ar & obj.row() & obj.col() & obj.value(); + ar& obj.row() & obj.col() & obj.value(); } }; } // namespace archive