First, it would have to be a `const T`.
Second, ignoring the question of `optional<reference_wrapper<const T>>` vs. `const T*`, to have the `const` and non-`const` overloads of a function return such disparate types is not reasonable. They're supposed to be functions that do the same thing.
Yes, it's unfortunate that `operator[]` potentially modifies the object. It would perhaps have been better if it were more like `find` or something. But that ship has sailed. Creating an interface that behaves in such a different way from the other overload is not a good solution to this problem.