https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113791
Marek Polacek <mpolacek at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords|needs-reduction |rejects-valid --- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> --- template <typename> struct remove_reference; template <typename _Tp> struct remove_reference<_Tp &> { typedef _Tp type; }; template <typename _Tp> typename remove_reference<_Tp>::type &&move(_Tp &&); template <typename _T2> struct pair { _T2 second; }; struct Foo { Foo(); Foo(const Foo &); Foo(Foo &&) = delete; }; struct _Node_const_iterator { const pair<Foo> *operator->(); }; template <typename, typename, typename = int> struct unordered_map { _Node_const_iterator find(int); }; bool b; template <template <class, class, class> class Map, typename... Args> void getMapEntry(Map<Args...> map, int key, Foo defval) { auto i = map.find(key); b ? i->second : move(defval); } int main() { unordered_map<int, int> map; getMapEntry(map, 3, {}); }