Stay organized with collections Save and categorize content based on your preferences.
Holds a value or a Status
indicating why there is no value.
StatusOr
<T>
represents either a usable T
value or a Status
object explaining why a T
value is not present. Typical usage of StatusOr
<T>
looks like usage of a smart pointer, or even a std::optional<T>
, in that you first check its validity using a conversion to bool (or by calling StatusOr::ok()
), then you may dereference the object to access the contained value.
It is undefined behavior (UB) to dereference a StatusOr
<T>
that is not "ok". For example:
StatusOr<Foo> foo = FetchFoo();
if (!foo) { // Same as !foo.ok()
// handle error and probably look at foo.status()
} else {
foo->DoSomethingFooey(); // UB if !foo
}
Alternatively, you may call the StatusOr::value()
member function, which is defined to: (1) throw an exception if there is no T
value, or (2) crash the program if exceptions are disabled. It is never UB to call value()
.
StatusOr<Foo> foo = FetchFoo();
foo.value().DoSomethingFooey(); // May throw/crash if there is no value
Functions that can fail will often return a StatusOr
<T>
instead of returning an error code and taking a T
out-param, or rather than directly returning the T
and throwing an exception on error. StatusOr
<T>
is used so that callers can choose whether they want to explicitly check for errors, crash the program, or throw exceptions.
Since constructors do not have a return value, they should be designed in such a way that they cannot fail by moving the object's complex initialization logic into a separate factory function that itself can return a StatusOr
<T>
. For example:
class Bar {
public:
Bar(Arg arg);
...
};
StatusOr<Bar> MakeBar() {
... complicated logic that might fail
return Bar(std::move(arg));
}
StatusOr
<T>
supports equality comparisons if the underlying type T
does.
Initializes with an error status (StatusCode::kUnknown
).
StatusOr const &
other
StatusOr &&
Creates a new StatusOr
<T>
holding the error condition rhs
.
rhs
Status
the status to initialize the object.
StatusOrCreates a new StatusOr
<T>
holding the value rhs
.
rhs
T &&
the value used to initialize the object.
StatusOr Parameter Name Descriptionrhs
T const &
T &
operator* Returns Type Description T const &
operator* Returns Type Description T &&
operator* Returns Type Description T const &&
operator-> Returns Type Description T *
operator-> Returns Type Description T const *
operator= Parameter Name Description
StatusOr const &
StatusOr &
operator= Parameter Name Description other
StatusOr &&
StatusOr &
operator=
Assigns the given non-OK Status to this StatusOr
<T>
.
status
Status
StatusOr &
operator=
Assign a T
(or anything convertible to T
) into the StatusOr
.
rhs
U &&
typename U
std::enable_if<!std::is_same< StatusOr, typenamestd::decay< U >::type >::value, StatusOr >::type &
operator bool
Returns true
when this
holds a value.
T &
value Returns Type Description T const &
value Returns Type Description T &&
value Returns Type Description T const &&
status Returns Type Description Status const &
status Returns Type Description Status &&
ok
Returns true
when this
holds a value.
bool
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2025-08-14 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-14 UTC."],[[["`StatusOr\u003cT\u003e` represents either a usable value of type `T` or a `Status` object indicating why a `T` value is not available."],["You can check the validity of a `StatusOr\u003cT\u003e` using a conversion to `bool` or the `ok()` method, and dereferencing it when it's not \"ok\" is undefined behavior."],["The `value()` member function can be used to access the contained value, but it may throw an exception or crash the program if no value is present."],["Functions that might fail often return a `StatusOr\u003cT\u003e` instead of using error codes, out-params, or exceptions directly, allowing callers to handle errors explicitly or rely on crashes/exceptions."],["Constructors should avoid failure, with complex initialization logic moved to factory functions that can return a `StatusOr\u003cT\u003e` to handle potential issues during object creation."]]],[]]
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4