If you think strict casting is a good thing, you haven't coded large projects before.
Casting on the fly is a godsend for most programs
I definitely can't speak from experience (the most I've ever coded in one place was a 2D physics engine that I never even finished), but I would have thought that being able to catch bugs that arise because loss of data when implicitly casting before you even compile would be worth having to explicitly specify casts between certain types.
I'm not knocking implicit casting in general; casting between different int types, or from float to double, for example, is almost always harmless. But implicitly casting to bool is frequently the result of an error, and in any case is more easily understood - if you really mean "if(X = Y)" rather than "if(X == Y)", it's much less likely another programmer will fix your 'mistake' if you write "if( (X = Y) != 0)" or "if(bool(X = Y))". Implicit casting is great when you don't really care about the data types, or when you want to make a section of code more readable, but it can readily make a mess of things if you don't intend to use it.
Don't even get me started on implicit casting when typedefs and #defines come into the picture. It's all too easy to break code that relies on implicit casts when you change the typedef. Since implicit casts have no speed benefit (the compiler rewrites them as explicit before linking, IIRC), I avoid them like the plague. But more experienced coders might have good reasons to disagree.