diff --git a/src/span.h b/src/span.h index 69baaf2708e..14ad8d284bb 100644 --- a/src/span.h +++ b/src/span.h @@ -290,9 +290,10 @@ template concept BasicByte = requires { UCharCast(std::span{}.data()); }; // Helper function to safely convert a Span to a Span<[const] unsigned char>. -template constexpr auto UCharSpanCast(Span s) -> Span::type> { return {UCharCast(s.data()), s.size()}; } +template constexpr auto UCharSpanCast(std::span s) { return std::span, N>{UCharCast(s.data()), s.size()}; } /** Like the Span constructor, but for (const) unsigned char member types only. Only works for (un)signed char containers. */ -template constexpr auto MakeUCharSpan(V&& v) -> decltype(UCharSpanCast(Span{std::forward(v)})) { return UCharSpanCast(Span{std::forward(v)}); } +template constexpr auto MakeUCharSpan(const V& v) -> decltype(UCharSpanCast(std::span{v})) { return UCharSpanCast(std::span{v}); } +template constexpr auto MakeWritableUCharSpan(V&& v) -> decltype(UCharSpanCast(std::span{std::forward(v)})) { return UCharSpanCast(std::span{std::forward(v)}); } #endif // BITCOIN_SPAN_H diff --git a/src/test/util_tests.cpp b/src/test/util_tests.cpp index 6ac6d30d6c5..706a6ba9198 100644 --- a/src/test/util_tests.cpp +++ b/src/test/util_tests.cpp @@ -160,8 +160,8 @@ BOOST_AUTO_TEST_CASE(parse_hex) BOOST_CHECK_EQUAL_COLLECTIONS(hex_literal_span.begin(), hex_literal_span.end(), expected.begin(), expected.end()); const std::vector hex_literal_vector{operator""_hex_v()}; - hex_literal_span = MakeUCharSpan(hex_literal_vector); - BOOST_CHECK_EQUAL_COLLECTIONS(hex_literal_span.begin(), hex_literal_span.end(), expected.begin(), expected.end()); + auto hex_literal_vec_span = MakeUCharSpan(hex_literal_vector); + BOOST_CHECK_EQUAL_COLLECTIONS(hex_literal_vec_span.begin(), hex_literal_vec_span.end(), expected.begin(), expected.end()); constexpr std::array hex_literal_array_uint8{operator""_hex_u8()}; BOOST_CHECK_EQUAL_COLLECTIONS(hex_literal_array_uint8.begin(), hex_literal_array_uint8.end(), expected.begin(), expected.end()); @@ -242,7 +242,7 @@ BOOST_AUTO_TEST_CASE(util_HexStr) { constexpr std::string_view out_exp{"04678afdb0"}; constexpr std::span in_s{HEX_PARSE_OUTPUT, out_exp.size() / 2}; - const Span in_u{MakeUCharSpan(in_s)}; + const std::span in_u{MakeUCharSpan(in_s)}; const std::span in_b{MakeByteSpan(in_s)}; BOOST_CHECK_EQUAL(HexStr(in_u), out_exp);