https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83445
Alexander Karzhenkov <karzh at mail dot ru> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |karzh at mail dot ru --- Comment #1 from Alexander Karzhenkov <karzh at mail dot ru> --- Candidate functions considered by overload resolution are Target::Target(Source const&); constexpr Target::Target(Target const&); constexpr Target::Target(Target&&); The first one doesn't require any user-defined conversion and therefore should win. The bug appears to be fixed in gcc 8, but it occurs again in gcc 9 and later versions.