It won't be as good as Haskell for memory safety. For example, this program, using only C++11 idioms, crashes:
#include <iostream>
#include <vector>
int main() {
std::vector<std::string> v;
v.push_back(std::string("Hello"));
v.push_back(std::string("there"));
for (auto ii = v.begin(), ie = v.end(); ii != ie; ++ii) {
v.clear();
std::cout << *ii << std::endl;
}
return 0;
}
Preventing this sort of thing requires strong guarantees about aliasing (to ensure that "v" can't alias the vector being iterated over), which the C++ type system can't help you with.