const_cast isn't the big issue, because there's also unsafePerformIO in Haskell. For both you could say, that they shouldn't be used, that it's bad programming practice to use them.
The point is, even if you follow good programming practices in C++, you can't express them and your compiler can't help you in the verification, if you're really following them.
That doesn't might seem like a big thing, it's also not related to your smartness, because it mostly depends on the size and complexity of your system.