# litert::Expected


`#include <litert_expected.h>`

A utility for generic return values that may represent a failure.

## Summary

`https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected` stores and owns the lifetime of either an `https://developers.google.com/edge/api/litert/c/classlitert/1-1-unexpected#classlitert_1_1_unexpected` object or a value of type `T`. `T` can be any primitive or non-primitive type.

No dynamic allocations occur during initialization, so the underlying `T` is only movable (as opposed to being releasable). Arguments should be constructed in-place when initializing the `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected` object if possible.

`https://developers.google.com/edge/api/litert/c/classlitert/1-1-unexpected#classlitert_1_1_unexpected&&` and `T&&` can be implicitly cast to an `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected`. For example:

```
Expected Bar() {
  bool success = ...
  if (!success) {
    return Unexpected(Status::kErrorUnknown, "Bad Baz");
  }
  return Foo();
}
```

<br />

| ### Constructors and Destructors ||
|---|---|
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1af15309775b3ba70fd429cb88b62048ec(std::initializer_list< U > il)` Constructs `T` from an initializer list in-place. ||
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1aeb809d2d52555d0a810071f63002408d(Args &&... args)` Constructs `T` from forwarded arguments in-place. ||
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1a852b3a2b242960da3e2993ebfb0e774b(reference t)` Allows for implicit conversion from a convertible `T` value in-place. ||
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1a080573594ec27d19a6ffb06772eefe9c(const U & t)` Copy-constructs from a constant reference. ||
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1a85740ac5ded0ae172557f21393ff63fc(https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1a934a8179e9d64754fd0d372a6c3c2cd3 && t)` ||
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1a618cb4a2e23f93d8fc980951d39d5b07(const https://developers.google.com/edge/api/litert/c/classlitert/1-1-unexpected#classlitert_1_1_unexpected & err)` Constructs from an `https://developers.google.com/edge/api/litert/c/classlitert/1-1-unexpected#classlitert_1_1_unexpected` object in-place. ||
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1af29067d6c70086b132f7f6afe075b9ee(https://developers.google.com/edge/api/litert/c/classlitert/1-1-unexpected#classlitert_1_1_unexpected && err)` ||
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1aa9bd44b8808074ef442d7c142a08ea17(const class https://developers.google.com/edge/api/litert/c/classlitert/1-1-error#classlitert_1_1_error & e)` ||
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1a735c5e9c99f35bac3ff863c1b287775d(https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected && other)` ||
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1a219e14ff336d674a9c44c26b83d18f31(const https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected & other)` ||
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1a7f72fecc0e5a1ea5ee233b9c0540eed6()` ||

| ### Public types ||
|---|---|
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1acbd89be54a02a477cc36f12367031869` | using `std::conditional_t< std::is_reference_v< T >, std::reference_wrapper< std::remove_reference_t< T >>, T >` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1a44136ce5386c97551efe49e006184bb1` | using `const https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1a934a8179e9d64754fd0d372a6c3c2cd3 *` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1a7d705591f3d7949b83c628f61db4c239` | using `const https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1a934a8179e9d64754fd0d372a6c3c2cd3 &` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1ac7218f5f8e354ba57c9f16840d3a7bb7` | using `std::remove_reference_t< T > *` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1ab10d3aab05f35227d6b2701382e6a2a8` | using `std::remove_reference_t< T > &` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1a934a8179e9d64754fd0d372a6c3c2cd3` | using `std::decay_t< T >` The following type definitions are in snake_case to match standard member types. |

| ### Public attributes ||
|---|---|
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1ad528951d0310b391a949b3c2fcdbe04d` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-unexpected#classlitert_1_1_unexpected` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1aafb9a3966d036fceb38c661027744994` | `StorageType` |

| ### Public functions ||
|---|---|
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1a56b37770cecd910c2ac1bc6ef85ac478() const &` | `const class https://developers.google.com/edge/api/litert/c/classlitert/1-1-error#classlitert_1_1_error &` Observer for `https://developers.google.com/edge/api/litert/c/classlitert/1-1-unexpected#classlitert_1_1_unexpected`. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1ad1e60d7af9526c9b4e08495653576a59()&` | `class https://developers.google.com/edge/api/litert/c/classlitert/1-1-error#classlitert_1_1_error &` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1af7fb6308b8f13fb28953ef508e931999() const &&=delete` | `const class https://developers.google.com/edge/api/litert/c/classlitert/1-1-error#classlitert_1_1_error &&` Deleted: an `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected` should always be checked before accessing its error. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1a5cef2032f4a47fde336521a8c066993a()&&=delete` | `class https://developers.google.com/edge/api/litert/c/classlitert/1-1-error#classlitert_1_1_error &&` Deleted: an `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected` should always be checked before accessing its error. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1a631bb9fc4cb7e9a12a4b9ad524261982() const ` | `bool` Checks if this `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected` contains a `T` value. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1a4b1bd9ea91f8ce5966be2f60c4c99d57() const &` | `const_reference` Observers for the `T` value. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1aa6920ddc19da359486cca3897014bfc4()&` | `reference` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1afb8dedf54c5abd866ab3e65adb5ff8ad() const &&=delete` | `reference &` Deleted: an `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected` should always be checked before accessing its value. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1ac8429a0df80bd8ff271fc0d0b5b3bf5c()&&=delete` | `reference &` Deleted: an `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected` should always be checked before accessing its value. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1a5248cdcaa4566f2cf0d16c3edfa11b9c() const ` | Converts to `bool` for `HasValue`. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1a27cb52dadfb7e6703e92f9beae1d83a4() const &` | `const_reference` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1a58ba79e072ce1a3187b32d7ba55539d9()&` | `reference` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1a5295f173645fdbf3030e98e882df5faf() const &&=delete` | `reference &` Deleted: an `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected` should always be checked before accessing its value. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1af325504c3596d1c5e2231ded49b09287()&&=delete` | `reference &` Deleted: an `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected` should always be checked before accessing its value. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1ad2106cd514a200e5d274d46c50850636() const &` | `const_pointer` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1a26414b9bd46e1f1a77f215209e06e60a()&` | `pointer` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1aa7ebca14fbad53b33e226d3f51791c11() const &&=delete` | `const_pointer` Deleted: an `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected` should always be checked before accessing its value. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1aba4e981821584a8eba14fb75f7b380fd()&&=delete` | `pointer` Deleted: an `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected` should always be checked before accessing its value. |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1adde7202805af5fc180cf3333df8911ba(https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected && other)` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected &` |
| `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected_1aab48271fd95cd345452e2998c8cce4c1(const https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected & other)` | `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected &` |

## Public types

### StorageType

```
std::conditional_t< std::is_reference_v< T >, std::reference_wrapper< std::remove_reference_t< T >>, T > StorageType
```

### const_pointer

```
const value_type * const_pointer
```

### const_reference

```
const value_type & const_reference
```

### pointer

```
std::remove_reference_t< T > * pointer
```

### reference

```
std::remove_reference_t< T > & reference
```

### value_type

```
std::decay_t< T > value_type
```
The following type definitions are in snake_case to match standard member types.

## Public attributes

### unexpected_

```
Unexpected unexpected_
```

### value_

```
StorageType value_
```

## Public functions

### Error

```
const class Error & Error() const &
```
Observer for `https://developers.google.com/edge/api/litert/c/classlitert/1-1-unexpected#classlitert_1_1_unexpected`.

The program exits if it doesn't have one.

### Error

```
class Error & Error()&
```

### Error

```
const class Error && Error() const &&=delete
```
Deleted: an `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected` should always be checked before accessing its error.

### Error

```
class Error && Error()&&=delete
```
Deleted: an `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected` should always be checked before accessing its error.

### Expected

```
 Expected(
  std::initializer_list< U > il
)
```
Constructs `T` from an initializer list in-place.

### Expected

```
 Expected(
  Args &&... args
)
```
Constructs `T` from forwarded arguments in-place.

### Expected

```
 Expected(
  reference t
)
```
Allows for implicit conversion from a convertible `T` value in-place.

### Expected

```
 Expected(
  const U & t
)
```
Copy-constructs from a constant reference.

This is disabled if `T` is a constant reference.

### Expected

```
 Expected(
  value_type && t
)
```

### Expected

```
 Expected(
  const Unexpected & err
)
```
Constructs from an `https://developers.google.com/edge/api/litert/c/classlitert/1-1-unexpected#classlitert_1_1_unexpected` object in-place.

Allows for implicit conversion from `https://developers.google.com/edge/api/litert/c/classlitert/1-1-error#classlitert_1_1_error`.

### Expected

```
 Expected(
  Unexpected && err
)
```

### Expected

```
 Expected(
  const class Error & e
)
```

### Expected

```
 Expected(
  Expected && other
)
```

### Expected

```
 Expected(
  const Expected & other
)
```

### HasValue

```
bool HasValue() const 
```
Checks if this `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected` contains a `T` value.

If not, it contains an `https://developers.google.com/edge/api/litert/c/classlitert/1-1-unexpected#classlitert_1_1_unexpected`.

### Value

```
const_reference Value() const &
```
Observers for the `T` value.

The program exits if it doesn't have one.

### Value

```
reference Value()&
```

### Value

```
reference & Value() const &&=delete
```
Deleted: an `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected` should always be checked before accessing its value.

### Value

```
reference & Value()&&=delete
```
Deleted: an `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected` should always be checked before accessing its value.

### operator bool

```
 operator bool() const 
```
Converts to `bool` for `HasValue`.

### operator\*

```
const_reference operator*() const &
```

### operator\*

```
reference operator*()&
```

### operator\*

```
reference & operator*() const &&=delete
```
Deleted: an `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected` should always be checked before accessing its value.

### operator\*

```
reference & operator*()&&=delete
```
Deleted: an `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected` should always be checked before accessing its value.

### operator-\>

```
const_pointer operator->() const &
```

### operator-\>

```
pointer operator->()&
```

### operator-\>

```
const_pointer operator->() const &&=delete
```
Deleted: an `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected` should always be checked before accessing its value.

### operator-\>

```
pointer operator->()&&=delete
```
Deleted: an `https://developers.google.com/edge/api/litert/c/classlitert/1-1-expected#classlitert_1_1_expected` should always be checked before accessing its value.

### operator=

```
Expected & operator=(
  Expected && other
)
```

### operator=

```
Expected & operator=(
  const Expected & other
)
```

### \~Expected

```
 ~Expected()
```