a lot of what you just said is all based on TOOLS issues, not so much language issues.
No. The macroprocessor and aliasing issues are solely in the language, and in general tools cannot get around the issues. The tools can help in special cases where disciplined developers only used a restricted subset of the language's capabilities - but in that case it probably won't be necessary to do refactoring in the first place.
The aliasing issue is very real and is a very significant problem, and significantly restricts the ability of compilers to do optimisations that are trivial in other languages. The workarounds (use of myriads of compiler flags) are error prone. If you
or your libraries' user accidentally uses the valid-but-inappropriate-combination of flags, a presumption is violated and their program will produce subtle errors. Perhaps the user will notice the error, probably not.
with a good ide, all languages are refactorable and you can find refs to functions, vars, externs, etc.
a lot of what java fans think is good about java is quite often about the ide they learned on!
I learned computing using Algol-60 on 5-channel paper tape. (Consider how you can represent digits, letters and symbols in 5 bits.)
I used C in the 80s, eventually moving to Objective-C, and avoiding C++.
I've used Java professionally since 1997.
So I've got wide knowledge and a solid history of making good choices about what technology really does advance the art of the possible.
don't get me started about makefiles (their equiv) on java. what a horrible mess! makefiles in c have been around so long, its a proven technology and not hard to master. ant and other build systems for java are horribly complex and take a long time to learn to do them well.
Famous problem with makefiles was that
invisible differences in the makefile caused different behaviour: tabs had different meanings to spaces! Stunning.
I love that python has no build system and no need for it. no compilers, and yet it runs very fast if you do things in the proper pythonic way
And the indentation-is-significant produces all sorts of
run-time errors that is avoided by "{...}" or "begin....end".
Welcome to shellshock-class bugs in every program!
c++ always annoyed the hell out of me. I love C since its been around forever, its used to write os's, networking stacks and most of the unix cmds you use every day. for scripting, though, I am migrating from bash to python. java was an interesting experiment, but I consider it like pascal: great to learn stuff on, but I hate having to support other peoples' code when they use java. and its mostly the new generation that insists on java; us oldtimers still mostly reject it (personal experience working in the bay area, fwiw).
If C++ is the answer, then (a) I want to know th equestion and (b) we should change the question.