std::promis...et_exception(3)
π NAME π
std::promise::set_exception β std::promise::set_exception. Yep, the name said it twice, she's thorough π
. This is the page for std::promise::set_exception from the C++ Standard Libary manual (yes, that's how the header spells it, she's doing her best), and the page badge is std::promis...et_exception(3) β abbreviated like an icon. β¨
πΈ Synopsis πΈ
Okay so here's the signature, and it's been iconic since C++11:
void set_exception( std::exception_ptr p ); (since C++11)
Atomically stores the exception pointer p into the shared state and makes the state ready. No cap.
The operation behaves as though set_value, set_exception, set_value_at_thread_exit, and set_exception_at_thread_exit acquire a single mutex associated with the promise object while updating the promise object. That's the whole synchronized bestie situation π«Ά.
An exception is thrown if there is no shared state or the shared state already stores a value or exception.
Calls to this function do not introduce data races with calls to get_future (therefore they need not synchronize with each other). Lowkey important, highkey slay. π₯
π¦ Parameters π¦
pβ exception pointer to store. The behavior is undefined ifpis null. Like, undefined behavior undefined β do not play with that. π«£
π Return value π
(none) β literally nothing comes back, bestie. It's giving "I did the thing, no receipt needed." π
β¨ Exceptions β¨
std::future_error on the following conditions:
*thishas no shared state. The error code is set tono_state.- The shared state already stores a value or exception. The error code is set to
promise_already_satisfied.
π Example π
// Run this code β yes bestie, run it, it's right here:
#include <future>
#include <iostream>
#include <thread>
int main()
{
std::promise<int> p;
std::future<int> f = p.get_future();
std::thread t([&p]
{
try
{
// code that may throw
throw std::runtime_error("Example");
}
catch (...)
{
try
{
// store anything thrown in the promise
p.set_exception(std::current_exception());
// or throw a custom exception instead
//
p.set_exception(std::make_exception_ptr(MyException("mine")));
}
catch (...) {} // set_exception() may throw too
}
});
try
{
std::cout << f.get();
}
catch (const std::exception& e)
{
std::cout << "Exception from the thread: " << e.what() << '\n';
}
t.join();
}
Output:
Exception from the thread: Example
π See also π
set_exception_at_thread_exitβ sets the result to indicate an exception while delivering the notification only at thread exit (public member function). The dramatic delayed-notification queen π.
Source/version/date check: this page came from http://cppreference.com, with the date 2024.06.10, and the footer badge is std::promis...et_exception(3). Bye bestie β go make those futures catch exceptions beautifully πβ¨π
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms