https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86739
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- Regressed between r262525 (good) and r262545 (bad). Thus probably caused by r262539. /usr/include/c++/4.1.2/bits/stl_pair.h:84 is /** Two objects may be passed to a @c pair constructor to be copied. */ pair(const _T1& __a, const _T2& __b) : first(__a), second(__b) { } so it somehow doesn't like _T1 == vec_usage*& here I added with std::pair<const Key&, Value&> operator* () { hash_entry &e = *m_iter; return std::pair<const Key&, Value&> (e.m_key, e.m_value); } C++ folks?