https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107267
--- Comment #9 from Martin Liška <marxin at gcc dot gnu.org> --- More reduced test-case: template <int __v> struct integral_constant { static constexpr int value = __v; }; template <bool __v> using __bool_constant = integral_constant<__v>; template <int> struct __conditional { template <typename _Tp, typename> using type = _Tp; }; template <bool _Cond, typename _If, typename _Else> using __conditional_t = typename __conditional<_Cond>::type<_If, _Else>; namespace std { template <typename _Tp> _Tp &&move(_Tp &&); struct pair { int second; }; template <int _Constant_iterators> struct _Hashtable_traits { using __constant_iterators = __bool_constant<_Constant_iterators>; }; template <int __constant_iterators> struct _Node_iterator { __conditional_t<__constant_iterators, pair *, pair> operator->(); }; using iterator = _Node_iterator<_Hashtable_traits<false>::__constant_iterators::value>; } // namespace std struct FindResult { FindResult(bool, int); std::pair result; }; std::iterator pop_itr; FindResult pop_ret = std::move(FindResult(true, pop_itr->second));