We're talking past each other here. What I mean by "sound in the abstract" is that assignment is a perfectly reasonable thing to be able to want to do.
Yeah, I don't see how you expected anyone to get that from what you posted when I specifically defined what I was referring to with 'algorithm' - "The problem is the underlying algorithm: memberwise assignment."
I'm saying that I believe it's easier to see that this is the correct way of doing things when you choose or are forced to use error codes over exceptions.
Had you said this originally I probably wouldn't have commented on it. However, it is irrelevant to your original complaint about compiler generated behavior that you don't see the code for. Whether or not code is obviously correct only helps when there is code to actually see.
It's a legitimate complaint to say that the default compiler generated behavior for the assignment operator has issues. However, the default behavior of compiler generated functions not magically doing what you want it to for every situation has only a tenuous connection with exception handling being part of the language or anyone choosing to use exception handling in their own code. Default behavior is exactly that: behavior for the default situation. This being C++, this default behavior emphasizes speed over correctness.
You can't blame exceptions for the fact that C++ has object assignment; it inherited struct assignment from C which doesn't have exceptions. You can't blame exceptions for the fact that C++ has operator= overloads, since that was something developed before the language was even called C++, in C with Classes, which also predated exceptions. If anything, the causal order is reversed, exceptions were added to C++ because things like assignment and constructors had issues with error situations. If you disable exceptions in your compiler you still need to manually implement the assignment operator if you want the strong guarantee. Yes, the default memberwise assignment is a potential problem, but exception handling is not to blame for it.