Why don't std::unordered_map and std::map have read-only versions of the subscript operator? At the very least, the read-only version could just call at(), right?
Then operator[] would have different semantics for const and non-const map objects. That isn't desireable. Why don't you just use at() for both const and non-const map objects if that is the behavior you're looking for?