diff --git a/include/evmc/evmc.hpp b/include/evmc/evmc.hpp index 3d336894f..f2e26edc9 100644 --- a/include/evmc/evmc.hpp +++ b/include/evmc/evmc.hpp @@ -289,7 +289,8 @@ namespace literals template constexpr T parse(std::string_view s) noexcept { - return from_hex(s).value(); + auto const v = from_hex(s); + return v.has_value() ? v.value() : T{}; } /// Literal for evmc::address. diff --git a/test/unittests/cpp_test.cpp b/test/unittests/cpp_test.cpp index 3c5f5f574..aa46d03dc 100644 --- a/test/unittests/cpp_test.cpp +++ b/test/unittests/cpp_test.cpp @@ -149,6 +149,12 @@ TEST(cpp, std_hash) std::fill_n(eb.bytes, sizeof(eb), uint8_t{0xee}); EXPECT_EQ(std::hash{}(eb), static_cast(0xbb14e5c56b477375)); + const auto zero_address = 0x0_address; + EXPECT_EQ(zero_address, evmc::address{}); + + const auto zero_bytes32 = 0x0_bytes32; + EXPECT_EQ(zero_bytes32, evmc::bytes32{}); + const auto rand_address_1 = 0xaa00bb00cc00dd00ee00ff001100220033004400_address; EXPECT_EQ(std::hash{}(rand_address_1), static_cast(0x30022347e325524e));