I am wondering when we can drop support for g++-8. All supported operating systems, except for CentOS Stream 8 offer a greater version:

* Ubuntu Focal: gcc 9 (https://packages.ubuntu.com/focal/gcc)
* Debian Bullseye: gcc 10 (https://packages.debian.org/bullseye/gcc)
* CentOS 8 Stream: gcc 8, with EOL of " May 31st, 2024 " (https://www.centos.org/centos-stream/)

The rationale for dropping it would be that there are currently occasional compile failures with perfectly valid C++-17 code, for example:

* `error: call to non-‘constexpr’ function ‘void __assert_fail(const char*, const char*, unsigned int, const char*)’ assert(false);` (https://godbolt.org/z/bxaMnfcsa)
const uint64_t m_k0, m_k1;
public:
    explicit PriorityComputer(bool deterministic) :
        m_k0{deterministic ? 0 : GetRand(0xFFFFFFFFFFFFFFFF)},
        m_k1{deterministic ? 0 : GetRand(0xFFFFFFFFFFFFFFFF)} {}
    Priority operator()(const uint256& txhash, NodeId peer, bool preferred) const
    {
        uint64_t low_bits = CSipHasher(m_k0, m_k1).Write(txhash.begin(), txhash.size()).Write(peer).Finalize() >> 1;
        return low_bits | uint64_t{preferred} << 63;
    }
    Priority operator()(const Announcement& ann) const
    {
        return operator()(ann.m_txhash, ann.m_peer, ann.m_preferred);
    }
};
struct ByPeer {};
using ByPeerView = std::tuple<NodeId, bool, const uint256&>;
struct ByPeerViewExtractor
{
    using result_type = ByPeerView;
    result_type operator()(const Announcement& ann) const
    {
        return ByPeerView{ann.m_peer, ann.GetState() == State::CANDIDATE_BEST, ann.m_txhash};
    }
};
struct ByTxHash {};
using ByTxHashView = std::tuple<const uint256&, State, Priority>;
class ByTxHashViewExtractor {