You really can't express immutability and pureness in C++, because you can
still modify global variables and do any kind of IO everywhere, regardless
of const.
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.