vector.at() is memory safe. You get a choice. Easy to ban [] if you cannot statically prove it is safe.
C++11 isn't the most memory safe language, but C++11 is a lot safer than older versions, and C++23 is better yet. I'm expecting true memory safety in C++26 (time will tell), but it will be opt-in profiles which isn't ideal.