Your proposal does not accurately distinguish between "not found" and "found a value of null/false/0". Currently c++ gets that distinction by comparing to container.end() You're going to need to get that info somehow.
Going by the example of a database, we need "null" to be completely distinct from any actual values. Here, you seem to be equating it with false, nullptr or 0. All of which are valid values within some container that would have to implement this interface.
Going by some examples from python, the "not found" option is an exception. That's easy to handle in python because the language makes performance sacrifices to make exceptions relatively easy to process. But handling it with an exception in c++ is far worse performance, and is significantly worse from a syntax clarity standpoint as well.
Your proposal is closer to a getter which provides a default value (e.g. false, 0, nullptr). You lose the information about whether it was found in the container, but that is not always needed. That's something you can implement in your class, but do you want to require it be implemented for all containers in the standard library? That's the question here.