diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -9719,6 +9719,11 @@ // Ill-formed if the copy and move constructors are deleted. auto HasNonDeletedCopyOrMoveConstructor = [&]() { + // If we know there exist users-defined move/copy ctors, don't try to infer + // the deletion of implicit ones becausee Sema may not have the info yet. + if (RD.hasUserDeclaredMoveConstructor() || + RD.hasUserDeclaredCopyConstructor()) + return true; if (RD.needsImplicitCopyConstructor() && !RD.defaultedCopyConstructorIsDeleted()) return true;