TLA Line data Source code
1 : //
2 : // Copyright (c) 2026 Michael Vandeberg
3 : //
4 : // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 : // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 : //
7 : // Official repository: https://github.com/cppalliance/capy
8 : //
9 :
10 : #ifndef BOOST_CAPY_DETAIL_QUITTER_STOPPED_HPP
11 : #define BOOST_CAPY_DETAIL_QUITTER_STOPPED_HPP
12 :
13 : #include <boost/capy/detail/config.hpp>
14 : #include <boost/capy/error.hpp>
15 :
16 : #include <system_error>
17 :
18 : /* What a stopped quitter<T> throws when T cannot hold canceled (void,
19 : or a plain T). It is a std::system_error with canceled, so callers
20 : catch it as one. Its own type lets run_async's default_handler drop
21 : a quitter's stop that escapes a task, while it still terminates on
22 : any other exception, a real ECANCELED included. A handler that
23 : catches it and throws a std::system_error copy loses the type.
24 : The type is visible so that catch still matches a stop thrown from
25 : another shared library in a hidden-visibility build. */
26 :
27 : namespace boost {
28 : namespace capy {
29 : namespace detail {
30 :
31 : struct BOOST_CAPY_SYMBOL_VISIBLE
32 : quitter_stopped
33 : : std::system_error
34 : {
35 HIT 29 : quitter_stopped()
36 29 : : std::system_error(make_error_code(error::canceled))
37 : {
38 29 : }
39 : };
40 :
41 : } // namespace detail
42 : } // namespace capy
43 : } // namespace boost
44 :
45 : #endif
|