avoid use of std::is_pod_v

implement it ourself in terms of std::is_trivial and
std::is_standard_layout. std::is_pod_v is deprecated in c++-20
This commit is contained in:
Arne Morten Kvarving
2024-11-06 10:35:27 +01:00
parent d9a3dd6f77
commit 15b12eaa3e

View File

@@ -34,6 +34,9 @@ namespace Opm::Mpi {
namespace detail { namespace detail {
template <typename T>
constexpr bool is_pod_v = std::is_standard_layout_v<T> && std::is_trivial_v<T>;
std::size_t mpi_buffer_size(const std::size_t bufsize, const std::size_t position); std::size_t mpi_buffer_size(const std::size_t bufsize, const std::size_t position);
//! \brief Abstract struct for packing which is (partially) specialized for specific types. //! \brief Abstract struct for packing which is (partially) specialized for specific types.
@@ -199,7 +202,7 @@ struct Packer
template<class T> template<class T>
std::size_t packSize(const T& data) const std::size_t packSize(const T& data) const
{ {
return detail::Packing<std::is_pod_v<T>,T>::packSize(data, m_comm); return detail::Packing<detail::is_pod_v<T>,T>::packSize(data, m_comm);
} }
//! \brief Calculates the pack size for an array. //! \brief Calculates the pack size for an array.
@@ -209,7 +212,7 @@ struct Packer
template<class T> template<class T>
std::size_t packSize(const T* data, std::size_t n) const std::size_t packSize(const T* data, std::size_t n) const
{ {
static_assert(std::is_pod_v<T>, "Array packing not supported for non-pod data"); static_assert(detail::is_pod_v<T>, "Array packing not supported for non-pod data");
return detail::Packing<true,T>::packSize(data, n, m_comm); return detail::Packing<true,T>::packSize(data, n, m_comm);
} }
@@ -223,7 +226,7 @@ struct Packer
std::vector<char>& buffer, std::vector<char>& buffer,
std::size_t& position) const std::size_t& position) const
{ {
detail::Packing<std::is_pod_v<T>,T>::pack(data, buffer, position, m_comm); detail::Packing<detail::is_pod_v<T>,T>::pack(data, buffer, position, m_comm);
} }
//! \brief Pack an array. //! \brief Pack an array.
@@ -238,7 +241,7 @@ struct Packer
std::vector<char>& buffer, std::vector<char>& buffer,
std::size_t& position) const std::size_t& position) const
{ {
static_assert(std::is_pod_v<T>, "Array packing not supported for non-pod data"); static_assert(detail::is_pod_v<T>, "Array packing not supported for non-pod data");
detail::Packing<true,T>::pack(data, n, buffer, position, m_comm); detail::Packing<true,T>::pack(data, n, buffer, position, m_comm);
} }
@@ -252,7 +255,7 @@ struct Packer
const std::vector<char>& buffer, const std::vector<char>& buffer,
std::size_t& position) const std::size_t& position) const
{ {
detail::Packing<std::is_pod_v<T>,T>::unpack(data, buffer, position, m_comm); detail::Packing<detail::is_pod_v<T>,T>::unpack(data, buffer, position, m_comm);
} }
//! \brief Unpack an array. //! \brief Unpack an array.
@@ -267,7 +270,7 @@ struct Packer
const std::vector<char>& buffer, const std::vector<char>& buffer,
std::size_t& position) const std::size_t& position) const
{ {
static_assert(std::is_pod_v<T>, "Array packing not supported for non-pod data"); static_assert(detail::is_pod_v<T>, "Array packing not supported for non-pod data");
detail::Packing<true,T>::unpack(data, n, buffer, position, m_comm); detail::Packing<true,T>::unpack(data, n, buffer, position, m_comm);
} }