https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113064
--- Comment #4 from m.cencora at gmail dot com --- This also might be a just another symptom of the same root cause: struct bar { bar() = default; bar(const bar&); bar(bar&&); bar& operator=(const bar&); bar& operator=(bar&&); }; struct foo { operator const bar& () const &; operator bar& () &; operator bar&&() &&; }; void test() { bar a = foo{}; // ok a = foo{}; // not ok - ambiguous call, but why? &&-qualified looks like a better match foo f; a = f; // ok a = static_cast<const foo&>(foo{}); // ok }