Currently the getters have a mutable reference as inout param and return a bool to indicate success. This is confusing, because the success bool is redundant with the IsValid() state on the proxy object.
So in theory, the functions could reset the mutable proxy object to an invalid state and return void.
However, this would also be confusing, because devs can forget to check IsValid().
Fix all issues by using std::optional<Proxy>, where devs no longer have to check IsValid() manually, or a separate bool.