Super nitty, I was just curious about what the possible ways of doing this are, and maybe this is preferable:
Making GetAllImpl a static member, so it doesn't need to be passed both a self and a this pointer:
diff --git a/src/validation.cpp b/src/validation.cpp
index 8fb8a876b3f..58bcd9e84e6 100644
--- a/src/validation.cpp
+++ b/src/validation.cpp
@@ -5646,14 +5646,14 @@ std::optional<uint256> ChainstateManager::SnapshotBlockhash() const
}
template <typename T>
-auto ChainstateManager::GetAllImpl(T* self) const
+auto ChainstateManager::GetAllImpl(T* self)
-> std::vector<std::conditional_t<std::is_const_v<T>, const Chainstate*, Chainstate*>>
{
LOCK(::cs_main);
using ChainstatePtr = std::conditional_t<std::is_const_v<T>, const Chainstate*, Chainstate*>;
std::vector<ChainstatePtr> out;
- for (ChainstatePtr cs : {m_ibd_chainstate.get(), m_snapshot_chainstate.get()}) {
+ for (ChainstatePtr cs : {self->m_ibd_chainstate.get(), self->m_snapshot_chainstate.get()}) {
if (self->IsUsable(cs)) out.push_back(cs);
}
diff --git a/src/validation.h b/src/validation.h
index 40420e11223..3ccb25dc29f 100644
--- a/src/validation.h
+++ b/src/validation.h
@@ -968,7 +968,7 @@ private:
//! [@see](/bitcoin-bitcoin/contributor/see/) GetAll() const
//! [@see](/bitcoin-bitcoin/contributor/see/) GetAll()
template <typename T>
- auto GetAllImpl(T* self) const
+ static auto GetAllImpl(T* self)
-> std::vector<std::conditional_t<std::is_const_v<T>, const Chainstate*, Chainstate*>>;
public: