From bcfb71569a252c973a00ae20a7536c01b33c62a9 Mon Sep 17 00:00:00 2001 From: chuanzhisongshu <49055103+982945902@users.noreply.github.com> Date: Mon, 25 Dec 2023 11:34:49 +0800 Subject: [PATCH] fix code error (#539) Co-authored-by: Zezheng.Li --- include/ylt/struct_pack/endian_wrapper.hpp | 23 ++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/include/ylt/struct_pack/endian_wrapper.hpp b/include/ylt/struct_pack/endian_wrapper.hpp index 578df95e5..051faed42 100644 --- a/include/ylt/struct_pack/endian_wrapper.hpp +++ b/include/ylt/struct_pack/endian_wrapper.hpp @@ -277,8 +277,9 @@ STRUCT_PACK_INLINE void write(Writer& writer, const T& t) { } else if constexpr (detail::array) { if constexpr (detail::is_little_endian_copyable && - std::is_fundamental_v) { - writer_bytes_array(writer, (const char*)&t.data(), sizeof(T)); + std::is_fundamental_v< + std::remove_reference_t>) { + write_bytes_array(writer, (const char*)t.data(), sizeof(T)); } else { for (auto& e : t) write(writer, e); @@ -289,7 +290,7 @@ STRUCT_PACK_INLINE void write(Writer& writer, const T& t) { detail::write_wrapper(writer, (char*)&len); if constexpr (detail::continuous_container && detail::is_little_endian_copyable) { - writer_bytes_array(writer, (const char*)&t.data(), len * sizeof(t[0])); + write_bytes_array(writer, (const char*)t.data(), len * sizeof(t[0])); } else { for (auto& e : t) write(writer, e); @@ -319,7 +320,8 @@ STRUCT_PACK_INLINE constexpr std::size_t get_write_size(const T& t) { return sizeof(T); } else if constexpr (detail::array) { - if constexpr (std::is_fundamental_v) { + if constexpr (std::is_fundamental_v< + std::remove_reference_t>) { return sizeof(T); } else { @@ -359,9 +361,10 @@ STRUCT_PACK_INLINE struct_pack::errc read(Reader& reader, T& t) { } } else if constexpr (detail::array) { - if constexpr (std::is_fundamental_v && + if constexpr (std::is_fundamental_v< + std::remove_reference_t> && detail::is_little_endian_copyable) { - return read_bytes_array(reader, (char*)&t.data(), sizeof(T)); + return read_bytes_array(reader, (char*)t.data(), sizeof(T)); } else { struct_pack::errc ec; @@ -381,7 +384,8 @@ STRUCT_PACK_INLINE struct_pack::errc read(Reader& reader, T& t) { return ec; } if constexpr (detail::continuous_container && - std::is_fundamental_v && + std::is_fundamental_v< + std::remove_reference_t> && detail::is_little_endian_copyable && checkable_reader_t) { if SP_UNLIKELY (sz > UINT64_MAX / sizeof(t[0]) || sz > SIZE_MAX) { @@ -392,7 +396,10 @@ STRUCT_PACK_INLINE struct_pack::errc read(Reader& reader, T& t) { return struct_pack::errc::no_buffer_space; } detail::resize(t, mem_size); - return read_bytes_array(reader, (char*)&t.data(), mem_size); + if (!read_bytes_array(reader, (char*)t.data(), mem_size)) { + return struct_pack::errc::no_buffer_space; + } + return struct_pack::errc{}; } else { for (std::size_t i = 0; i < sz; ++i) {