PaulS:
I'll never understand why Microsoft invented a bunch of complex templates for casting, and why anyone uses them.
Just to set the record straight, the different cast types allow you to perform different types of casting as opposed to the C casting operation that strips all attributes from the cast variable. They also allow proper casting of polymorphic objects.
E.g. static_cast<char *>() will convert a (const void *) pointer to (const char *) pointer without stripping the const attribute. There is no way to do this with C casts unless you know that the original variable is const in every case to start with, and explicitly cast as (const char *).