The code is already written and the effort has been spent
This is also not necessary. If you do not use it for anything, it is (by definition) useless, regardless of what it does or how much effort has been spent on it.
The code can be tested in a synthetic and real environment.
If it is useless, it is still useless, even if you have tests on it. If the code is useless, the tests for it should also be useless (so keeping the code with comments there, creating ambiguity - do you perform tests? If you have client code for the commented code, are you also commenting on the client code?)
If it’s well organized (grouped, separate package, loosely coupled, etc.), this does not bother you when analyzing common code or refactoring
Not this way. All your tools (source control, static analysis, documentation extractor, compiler, etc.) will work slower because they need to process more data (and more or less of this data is noise).
If the code is not well organized, on the other hand, it will ruin static analysis, refactoring, and any others.
You introduce noise into your instruments and hope that they handle it properly.
What if your static analysis tool calculates the comment / code ratio? You just messed it up with something that was relevant until yesterday (or whenever the code was commented out).
Most appropriate of all, commented blocks of code introduce delays in understanding the code for maintenance and further development, and such delays are almost always expensive. Ask yourself: if you need to understand the implementation of a function, what would you rather see? two lines of clear code or two lines of code and another twenty-six comments that are no longer relevant?
The code may be used in the future.
If so, you will find it in your SCM team of choice.
If you use competent SCM and rely on it to save dead code (instead of cluttering the source), you should see not only those who deleted this code (commit author), but also for what reason (commit message) and which other changes were made with it (the rest of the differences for this commit).
When deleted, the author may feel uncomfortable
So?
You (I guess) are a whole development team that gets paid to make the best software you know, and not the "best software you know how to not harm X's feelings."
This is the part of programming that will ultimately be discarded in most written code; for example, Joel Spolsky at some point said that for his company about 2% of the written code sees production.
If you determine the priority of the ego of developers over the quality of the code base, you will sacrifice the quality of your product, because ... what exactly? Keep the immaturity of your fellow developers? Protecting the unrealistic expectations of your colleagues?
Edit: I saw one real reason to leave the code with comments in the source, and this is a very specific case: when the code is written in a strange / non-intuitive way and the clean way of rewriting does not work for a really subtle reason. This should also be applied only after a repeated attempt to correct the problem and every time an attempt is made to reintroduce the same defect. In this case, you should add the commented-in intuitive code as a comment and explain why it does not work (so that future developers will not repeat the same change):