Namespaces
Variants
Actions

std::expected<T,E>::operator bool, std::expected<T,E>::has_value

From cppreference.com
< cpp‎ | utility‎ | expected
 
 
Utilities library
General utilities
Relational operators (deprecated in C++20)
(C++20)(C++20)(C++20)  
(C++20)
(C++20)
(C++14)
(C++11)
(C++11)
(C++23)
(C++11)
(C++17)
Common vocabulary types
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)


 
 
constexpr explicit operator bool() const noexcept;
(1) (since C++23)
constexpr bool has_value() const noexcept;
(2) (since C++23)

Checks whether *this represents an expected value.

[edit] Return value

has_val

[edit] Notes

A std::expected object is never valueless. If has_value() returns true, operator*() can be used to access the expected value; otherwise, error() can be used to access the unexpected value.

[edit] Example

Run this code
#include <charconv>
#include <concepts>
#include <cstdint>
#include <expected>
#include <print>
#include <string>
#include <string_view>
#include <system_error>
 
template<std::integral Int = int>
constexpr std::expected <Int, std::string > to_int(std::string_view str)
{
 Int value{};
 const auto [_, ec] = std::from_chars (str.data(), str.data() + str.size(), value);
 if (ec == std::errc ())
 return value;
 return std::unexpected {std::move(std::make_error_code (ec).message())};
}
 
int main()
{
 if (auto result = to_int("42"); result.has_value())
 std::println ("{}", *result); // after the check it is safe to use operator*
 else
 std::println ("{}", result.error());
 
 if (const auto result = to_int("not a number"); result)
 std::println ("{}", *result);
 else
 std::println ("{}", result.error());
 
 if (const auto result{to_int<std::int16_t >("32768")}) // implicitly calls (1)
 std::println ("{}", *result);
 else
 std::println ("{}", result.error());
}

Possible output:

42
Invalid argument
Numerical result out of range

[edit] See also

accesses the expected value
(public member function) [edit]
returns the unexpected value
(public member function) [edit]
checks whether the object contains a value
(public member function of std::optional<T>) [edit]
Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/utility/expected/operator_bool&oldid=183385"

AltStyle によって変換されたページ (->オリジナル) /