@@ -3,27 +3,26 @@ <h1>Parallel exceptions</h1>
3
3
< cxx-section id ="parallel.exceptions.behavior ">
4
4
< h1 > Exception reporting behavior</ h1 >
5
5
< p >
6
- During the execution of a standard parallel algorithm,
7
- if temporary memory resources are required and none are available,
6
+ < ins2 > During the execution of a standard parallel algorithm, </ ins2 >
7
+ < del2 > I </ del2 > < ins2 > i </ ins2 > f temporary memory resources are required < del2 > by the algorithm </ del2 > and none are available,
8
8
the algorithm throws a < code > std::bad_alloc</ code > exception.
9
9
</ p >
10
10
< p >
11
- During the execution of a standard parallel algorithm, if the < del > application of a function
12
- object</ del > < ins > invocation of an element access function</ ins > terminates with an uncaught
13
- exception, the behavior of the program is determined by the type of execution policy used to
14
- invoke the algorithm:
11
+ During the execution of a standard parallel algorithm, if the application of a function
12
+ object terminates with an uncaught exception, the behavior of the program is determined
13
+ by the type of execution policy used to invoke the algorithm:
15
14
16
15
< ul >
17
16
< li >
18
- If the execution policy object is of type < code > class parallel_vector_execution_policy</ code > ,
17
+ If the execution policy object is of type < code > class < del2 > vector_execution_policy </ del2 > < ins2 > parallel_vector_execution_policy</ ins2 > </ code > ,
19
18
< code > std::terminate</ code > shall be called.
20
19
</ li >
21
20
< li >
22
21
If the execution policy object is of type < code > sequential_execution_policy</ code > or
23
22
< code > parallel_execution_policy</ code > , the execution of the algorithm terminates with an
24
23
< code > exception_list</ code > exception. All uncaught exceptions thrown during
25
- the < del > application of user-provided function objects</ del > < ins > invocations of element access functions </ ins >
26
- shall be contained in the < code > exception_list</ code > .< pre >
24
+ the application of user-provided function objects shall be contained in the
25
+ < code > exception_list</ code > .< pre >
27
26
</ pre >
28
27
29
28
< cxx-note >
@@ -60,28 +59,41 @@ <h1>Header <code><experimental/exception_list></code> synopsis</h1>
60
59
namespace std {
61
60
namespace experimental {
62
61
namespace parallel {
63
- inline namespace v1 {
62
+ < ins2 > inline namespace v1 {</ ins2 >
64
63
65
64
class exception_list : public exception
66
65
{
67
66
public:
68
- typedef < em > unspecified</ em > iterator;
67
+ < del2 >
68
+ typedef exception_ptr value_type;
69
+ typedef const value_type& reference;
70
+ typedef const value_type& const_reference;
71
+ typedef < em > implementation-defined</ em > const_iterator;
72
+ typedef const_iterator iterator;
73
+ typedef typename iterator_traits< ins2 > <const_iterator></ ins2 > ::difference_type difference_type;
74
+ typedef size_t size_type;</ del2 >
75
+ < ins2 >
76
+ typedef < em > unspecified</ em > iterator;</ ins2 >
69
77
70
78
size_t size() const noexcept;
71
79
iterator begin() const noexcept;
72
80
iterator end() const noexcept;
73
81
74
- const char* what() const override noexcept;
82
+ < ins2 > const char* what() const noexcept override;</ ins2 >
83
+ < del2 >
84
+ private:
85
+ std::list<exception_ptr> exceptions_; // exposition only
86
+ </ del2 >
75
87
};
76
- }
88
+ < ins2 > } </ ins2 >
77
89
}
78
90
}
79
91
}
80
92
</ pre >
81
93
82
94
< p >
83
- The class < code > exception_list</ code > owns a sequence of < code > exception_ptr</ code > objects. The parallel
84
- algorithms may use the < code > exception_list</ code > to communicate uncaught exceptions encountered during parallel execution to the
95
+ The class < code > exception_list</ code > < del2 > is a container </ del2 > < ins2 > owns a sequence</ ins2 > of < code > exception_ptr</ code > objects < ins2 > . The</ ins2 > parallel
96
+ algorithms may use < ins2 > the < code > exception_list</ code > </ ins2 > to communicate uncaught exceptions encountered during parallel execution to the
85
97
caller of the algorithm.
86
98
</ p >
87
99
@@ -106,7 +118,7 @@ <h1>Header <code><experimental/exception_list></code> synopsis</h1>
106
118
107
119
< cxx-function >
108
120
< cxx-signature >
109
- iterator begin() const noexcept;
121
+ < del2 > exception_list:: </ del2 > iterator begin() const noexcept;
110
122
</ cxx-signature >
111
123
112
124
< cxx-returns >
@@ -116,21 +128,21 @@ <h1>Header <code><experimental/exception_list></code> synopsis</h1>
116
128
117
129
< cxx-function >
118
130
< cxx-signature >
119
- iterator end() const noexcept;
131
+ < del2 > exception_list:: </ del2 > iterator end() const noexcept;
120
132
</ cxx-signature >
121
133
122
134
< cxx-returns >
123
- An iterator that is past the end of the owned sequence.
135
+ An iterator < del2 > which is the past-the-end value for the < code > exception_list </ code > </ del2 > < ins2 > that is past the end of the owned sequence.</ ins2 >
124
136
</ cxx-returns >
125
137
</ cxx-function >
126
138
127
139
< cxx-function >
128
140
< cxx-signature >
129
- const char* what() const noexcept override;
141
+ < ins2 > const char* what() const noexcept override;</ ins2 >
130
142
</ cxx-signature >
131
143
132
144
< cxx-returns >
133
- An implementation-defined NTBS.
145
+ < ins2 > An implementation-defined NTBS.</ ins2 >
134
146
</ cxx-returns >
135
147
</ cxx-function >
136
148
</ cxx-section >
0 commit comments