Well, all I can offer is my own experience. Even the much-maligned
"uninitialized variable" warning has helped me catch a few errors that
I would otherwise have let slip until I started testing, where they
would have been harder to catch.
I apologize if I gave the impression that I was somehow not in favor of
having an "uninitialized variable" compiler error. That's not the case.
In fact, it's exactly because I think it's such a useful compile-time
error that it frustrates me when the compiler doesn't even pick up on
relatively simple cases where the variable *is* always initialized and I
have to do something arbitrary to make the compiler be quiet.
To be sure, I *like* having the compiler looking for uninitialized
variables. I just don't like it when the compiler is mistaken and
generates a false positive.
However, you're right in one sense: this is probably like the Java
"checked exception" debate: it's too easy to simply do the wrong thing
in order to make the compiler shut up, rather than reorganizing the
code so that the warning is still useful but the code is now something
acceptable to the compiler. By this I mean the difference between
adding an "else" case to initialize the variable, rather than simply
setting it to zero upon declaration. That sort of thing.
Well, that's part of my complaint. There are relatively simple examples
of the compiler complaining that involve only multiple paths, all of which
initialize a variable. Reorganizing the code doesn't really help. Either
the error remains, or the code is now reorganized in a less-desirable,
less-maintainable, less-clear way.
We're not talking about deeply nested, strangely-arranged loops, if()
statements, etc. here. We're talking about code that has just two
branches, both of which initialize the variable, and yet the compiler
complains.
As well, from my own experience, C++ newbies produce some of the
buggiest code I've ever seen. The language is so powerful, and
provides so little hand-holding that it's dead easy to make fatal
mistakes. With great power comes great responsibility, as it were.
I think C# represents great strides in improving the "idiot-proofness" of
the language. Again, this is one of the reasons this particular issue
bugs me. The compiler error as implemented not only fails to idiot-proof
the code, it tends to lead to code that is even more resistant to
idiot-proofing than usual.
Granted, there's always a better idiot.

But I think the goals of C#
are commendable, and that's why I'm annoyed that it falls down in this one
particular situation.
Pete