Для проверки исключения в потоке можно использовать несколько подходов, зависящих от того, как поток был создан и как обрабатываются его результаты.
Использование std::future и std::async:
Если поток был запущен с помощью std::async, результатом будет объект std::future. Вызов методов get() или wait() на этом объекте приведет к тому, что исключение, выброшенное в потоке, будет повторно выброшено в вызывающем потоке.
cpp
Использование std::promise и std::future:
Можно явно передать std::promise в поток или хранить его вне потока, чтобы поток мог сохранить исключение.
cpp
Ручное управление исключениями:
Поток может перехватить исключение внутри себя и сохранить его (например, в std::exception_ptr) или уведомить другой поток о его возникновении (например, через атомарную переменную или мьютекс с условной переменной).
cpp
Выбор метода зависит от контекста: std::async с std::future наиболее удобен для получения результата или исключения из отдельной задачи, тогда как std::promise/std::future или ручное управление могут быть полезны в более сложных сценариях синхронизации.