diff --git a/src/protocols/protocol_address_in_31402.cpp b/src/protocols/protocol_address_in_31402.cpp
index 4e8a729e9..610a49d72 100644
--- a/src/protocols/protocol_address_in_31402.cpp
+++ b/src/protocols/protocol_address_in_31402.cpp
@@ -87,19 +87,15 @@ address::cptr protocol_address_in_31402::filter(
// Returns zero if minimum > maximum.
const size_t select = pseudo_random::next(minimum, maximum);
-
if (is_zero(select))
return to_shared
();
- // CLang doesn't like emplacement with default constructors, so use new.
- BC_PUSH_WARNING(NO_NEW_OR_DELETE)
- const auto message = std::shared_ptr(new address{ items });
- BC_POP_WARNING()
-
// Shuffle, reduce, and filter to the target amount.
- pseudo_random::shuffle(message->addresses);
- message->addresses.resize(select);
- std::erase_if(message->addresses, [&](const auto& address) NOEXCEPT
+ const auto message = to_shared(items);
+ auto& addresses = const_cast(message->addresses);
+ pseudo_random::shuffle(addresses);
+ addresses.resize(select);
+ std::erase_if(addresses, [&](const auto& address) NOEXCEPT
{
return settings().excluded(address);
});
diff --git a/src/protocols/protocol_seed_31402.cpp b/src/protocols/protocol_seed_31402.cpp
index 301759957..5c5598056 100644
--- a/src/protocols/protocol_seed_31402.cpp
+++ b/src/protocols/protocol_seed_31402.cpp
@@ -128,19 +128,15 @@ address::cptr protocol_seed_31402::filter(
// Returns zero if minimum > maximum.
const size_t select = pseudo_random::next(minimum, maximum);
-
if (is_zero(select))
return to_shared();
- // CLang doesn't like emplacement with default constructors, so use new.
- BC_PUSH_WARNING(NO_NEW_OR_DELETE)
- const auto message = std::shared_ptr(new address{ items });
- BC_POP_WARNING()
-
// Shuffle, reduce, and filter to the target amount.
- pseudo_random::shuffle(message->addresses);
- message->addresses.resize(select);
- std::erase_if(message->addresses, [&](const auto& address) NOEXCEPT
+ const auto message = to_shared(new address{ items });
+ auto& addresses = const_cast(message->addresses);
+ pseudo_random::shuffle(addresses);
+ addresses.resize(select);
+ std::erase_if(addresses, [&](const auto& address) NOEXCEPT
{
return settings().excluded(address);
});