| 76 | |
| 77 | template <typename U, typename T> |
| 78 | inline std::enable_if_t<std::is_trivially_copyable_v<T> && |
| 79 | std::is_trivially_copyable_v<U> && sizeof(T) == sizeof(U), |
| 80 | U> |
| 81 | SafeCopy(T value) { |
| 82 | using TypeU = std::remove_const_t<U>; |
| 83 | arrow::internal::AlignedStorage<TypeU> raw_data; |
| 84 | std::memcpy(raw_data.get(), static_cast<const void*>(&value), sizeof(T)); |
| 85 | auto data = *raw_data.get(); |
| 86 | raw_data.destroy(); |
| 87 | return data; |
| 88 | } |
| 89 | |
| 90 | template <typename T> |
| 91 | inline std::enable_if_t<std::is_trivially_copyable_v<T>, void> SafeStore(void* unaligned, |