https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113064
--- Comment #1 from m.cencora at gmail dot com ---
Fixed sample (a typo in else branch of WORKAROUND2):
struct no_copy
{
no_copy() = default;
no_copy(const no_copy&) = delete;
no_copy(no_copy&&);
no_copy& operator=(const no_copy&) = delete;
no_copy& operator=(no_copy&&);
};
struct foo
{
operator no_copy() &
{
return no_copy();
}
#ifndef WORKAROUND1
operator no_copy&&() && = delete;
#endif
};
void test()
{
foo f;
no_copy nc;
#ifndef WORKAROUND2
nc = f;
#else
nc = f.operator no_copy();
#endif
}