https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125135

--- Comment #6 from Jason Merrill <jason at gcc dot gnu.org> ---
So, we look up a RE constructor for the new T in build(), so we lazily declare
all the RE constructors.  
Building the RE move constructor means looking for how to move an A.
A doesn't have a move constructor, so add_candidates doesn't find a perfect
match, so it also considers the template constructor.
The first parameter of the template is RE&, so we check whether we can convert
from A&& to RE&.
To do this we need to consider the RE constructors, so we lazily declare them
again.
Recurse until segfault.

Previously, we would avoid this cycle by clearing the LAZY flags, but rather
than revert that change I think we should extend the CWG1092 fix to cover this
case as well.

Reply via email to