https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108158
Martin Liška <marxin at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |marxin at gcc dot gnu.org
--- Comment #4 from Martin Liška <marxin at gcc dot gnu.org> ---
I've just reduced that into:
$ cat pr108158.ii
template <class T, int N> struct carray {
T data_[N]{};
constexpr T operator[](long index) const { return data_[index]; }
};
struct seed_or_index {
private:
long value_ = 0;
};
template <int M> struct pmh_tables {
carray<seed_or_index, M> first_table_;
template <typename KeyType, typename HasherType>
constexpr void lookup(KeyType, HasherType) const {
first_table_[0];
}
};
template <int N> struct unordered_set {
int equal_;
carray<int, N> keys_;
pmh_tables<N> tables_;
constexpr unordered_set() : equal_{} {}
template <class KeyType, class Hasher>
constexpr auto lookup(KeyType key, Hasher hash) const {
tables_.lookup(key, hash);
return keys_;
}
};
constexpr unordered_set<3> ze_set;
constexpr auto nocount = ze_set.lookup(4, int());