I teach my C++11 students to always use curly braces when defining a variable or assign an auto variable from an expression. This way it is guaranteed to be initialized. Any code that doesn't use them is easy to spot.
In practice I've found this helps make the bugs repeatable at run time, but rarely addresses the underlying problem. People ought to think about how they want to initialize stuff.
And then there are annoying cases where that just doesn't work:
struct S {
S() : b{} () // does not do what you think it should do
std::atomic<bool> b;
};
Like the pro-ub arguments, just initializing something makes it much harder to analyze the code to find bugs.