Any style that encourages errors is a bad style. Yes, it's possible to make the code correct and still use up-front declarations. It's also possible to make the code correct while using a 10k-line main() littered with gotos. It's still a very poor programming style.
People make mistakes. Practices should be built around this fact, not built assuming people could be perfect if they just tried a little harder.
Yes. I have absolutely seen bugs caused by the wrong variables being assigned to. I've seen it especially with loop variables. jaegerpicker indicates that he's also caused bugs by assigning to the wrong variables.
Not sure what you mean about "heavy constructor/destructor use" requiring this style.