From Jason Turner

[execpol]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmp76h21xbj/{from.md → to.md} +30 -416
tmp/tmp76h21xbj/{from.md → to.md} RENAMED
@@ -1,13 +1,13 @@
1
  ## Execution policies <a id="execpol">[[execpol]]</a>
2
 
3
  ### In general <a id="execpol.general">[[execpol.general]]</a>
4
 
5
- This subclause describes classes that are *execution policy* types. An
6
- object of an execution policy type indicates the kinds of parallelism
7
- allowed in the execution of an algorithm and expresses the consequent
8
- requirements on the element access functions.
9
 
10
  [*Example 1*:
11
 
12
  ``` cpp
13
  using namespace std;
@@ -50,14 +50,18 @@ namespace std::execution {
50
  class parallel_policy;
51
 
52
  // [execpol.parunseq], parallel and unsequenced execution policy
53
  class parallel_unsequenced_policy;
54
 
 
 
 
55
  // [execpol.objects], execution policy objects
56
  inline constexpr sequenced_policy seq{ unspecified };
57
  inline constexpr parallel_policy par{ unspecified };
58
  inline constexpr parallel_unsequenced_policy par_unseq{ unspecified };
 
59
  }
60
  ```
61
 
62
  ### Execution policy type trait <a id="execpol.type">[[execpol.type]]</a>
63
 
@@ -67,11 +71,11 @@ template<class T> struct is_execution_policy { see below };
67
 
68
  `is_execution_policy` can be used to detect execution policies for the
69
  purpose of excluding function signatures from otherwise ambiguous
70
  overload resolution participation.
71
 
72
- `is_execution_policy<T>` shall be a `UnaryTypeTrait` with a base
73
  characteristic of `true_type` if `T` is the type of a standard or
74
  *implementation-defined* execution policy, otherwise `false_type`.
75
 
76
  [*Note 1*: This provision reserves the privilege of creating
77
  non-standard execution policies to the library
@@ -90,11 +94,11 @@ The class `execution::sequenced_policy` is an execution policy type used
90
  as a unique type to disambiguate parallel algorithm overloading and
91
  require that a parallel algorithm’s execution may not be parallelized.
92
 
93
  During the execution of a parallel algorithm with the
94
  `execution::sequenced_policy` policy, if the invocation of an element
95
- access function exits via an uncaught exception, `terminate()` shall be
96
  called.
97
 
98
  ### Parallel execution policy <a id="execpol.par">[[execpol.par]]</a>
99
 
100
  ``` cpp
@@ -105,11 +109,11 @@ The class `execution::parallel_policy` is an execution policy type used
105
  as a unique type to disambiguate parallel algorithm overloading and
106
  indicate that a parallel algorithm’s execution may be parallelized.
107
 
108
  During the execution of a parallel algorithm with the
109
  `execution::parallel_policy` policy, if the invocation of an element
110
- access function exits via an uncaught exception, `terminate()` shall be
111
  called.
112
 
113
  ### Parallel and unsequenced execution policy <a id="execpol.parunseq">[[execpol.parunseq]]</a>
114
 
115
  ``` cpp
@@ -122,426 +126,36 @@ overloading and indicate that a parallel algorithm’s execution may be
122
  parallelized and vectorized.
123
 
124
  During the execution of a parallel algorithm with the
125
  `execution::parallel_unsequenced_policy` policy, if the invocation of an
126
  element access function exits via an uncaught exception, `terminate()`
127
- shall be called.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
128
 
129
  ### Execution policy objects <a id="execpol.objects">[[execpol.objects]]</a>
130
 
131
  ``` cpp
132
  inline constexpr execution::sequenced_policy execution::seq{ unspecified };
133
  inline constexpr execution::parallel_policy execution::par{ unspecified };
134
  inline constexpr execution::parallel_unsequenced_policy execution::par_unseq{ unspecified };
 
135
  ```
136
 
137
  The header `<execution>` declares global objects associated with each
138
  type of execution policy.
139
 
140
- <!-- Link reference definitions -->
141
- [alg.sorting]: algorithms.md#alg.sorting
142
- [algorithms]: algorithms.md#algorithms
143
- [algorithms.general]: algorithms.md#algorithms.general
144
- [allocator.adaptor]: #allocator.adaptor
145
- [allocator.adaptor.cnstr]: #allocator.adaptor.cnstr
146
- [allocator.adaptor.members]: #allocator.adaptor.members
147
- [allocator.adaptor.syn]: #allocator.adaptor.syn
148
- [allocator.adaptor.types]: #allocator.adaptor.types
149
- [allocator.globals]: #allocator.globals
150
- [allocator.members]: #allocator.members
151
- [allocator.requirements]: library.md#allocator.requirements
152
- [allocator.requirements.completeness]: library.md#allocator.requirements.completeness
153
- [allocator.tag]: #allocator.tag
154
- [allocator.traits]: #allocator.traits
155
- [allocator.traits.members]: #allocator.traits.members
156
- [allocator.traits.types]: #allocator.traits.types
157
- [allocator.uses]: #allocator.uses
158
- [allocator.uses.construction]: #allocator.uses.construction
159
- [allocator.uses.trait]: #allocator.uses.trait
160
- [any]: #any
161
- [any.assign]: #any.assign
162
- [any.bad_any_cast]: #any.bad_any_cast
163
- [any.class]: #any.class
164
- [any.cons]: #any.cons
165
- [any.modifiers]: #any.modifiers
166
- [any.nonmembers]: #any.nonmembers
167
- [any.observers]: #any.observers
168
- [any.synop]: #any.synop
169
- [arithmetic.operations]: #arithmetic.operations
170
- [arithmetic.operations.divides]: #arithmetic.operations.divides
171
- [arithmetic.operations.minus]: #arithmetic.operations.minus
172
- [arithmetic.operations.modulus]: #arithmetic.operations.modulus
173
- [arithmetic.operations.multiplies]: #arithmetic.operations.multiplies
174
- [arithmetic.operations.negate]: #arithmetic.operations.negate
175
- [arithmetic.operations.plus]: #arithmetic.operations.plus
176
- [array]: containers.md#array
177
- [associative]: containers.md#associative
178
- [atomics.order]: atomics.md#atomics.order
179
- [atomics.types.operations]: atomics.md#atomics.types.operations
180
- [basic.align]: basic.md#basic.align
181
- [basic.compound]: basic.md#basic.compound
182
- [basic.def.odr]: basic.md#basic.def.odr
183
- [basic.fundamental]: basic.md#basic.fundamental
184
- [basic.life]: basic.md#basic.life
185
- [basic.stc.dynamic.deallocation]: basic.md#basic.stc.dynamic.deallocation
186
- [basic.stc.dynamic.safety]: basic.md#basic.stc.dynamic.safety
187
- [basic.types]: basic.md#basic.types
188
- [bitmask.types]: library.md#bitmask.types
189
- [bitset]: #bitset
190
- [bitset.cons]: #bitset.cons
191
- [bitset.hash]: #bitset.hash
192
- [bitset.members]: #bitset.members
193
- [bitset.operators]: #bitset.operators
194
- [bitset.syn]: #bitset.syn
195
- [bitwise.operations]: #bitwise.operations
196
- [bitwise.operations.and]: #bitwise.operations.and
197
- [bitwise.operations.not]: #bitwise.operations.not
198
- [bitwise.operations.or]: #bitwise.operations.or
199
- [bitwise.operations.xor]: #bitwise.operations.xor
200
- [c.malloc]: #c.malloc
201
- [comparisons]: #comparisons
202
- [comparisons.equal_to]: #comparisons.equal_to
203
- [comparisons.greater]: #comparisons.greater
204
- [comparisons.greater_equal]: #comparisons.greater_equal
205
- [comparisons.less]: #comparisons.less
206
- [comparisons.less_equal]: #comparisons.less_equal
207
- [comparisons.not_equal_to]: #comparisons.not_equal_to
208
- [conv.array]: conv.md#conv.array
209
- [conv.func]: conv.md#conv.func
210
- [conv.lval]: conv.md#conv.lval
211
- [conv.rank]: conv.md#conv.rank
212
- [csignal.syn]: language.md#csignal.syn
213
- [cstdlib.syn]: language.md#cstdlib.syn
214
- [ctime.syn]: #ctime.syn
215
- [dcl.array]: dcl.md#dcl.array
216
- [dcl.constexpr]: dcl.md#dcl.constexpr
217
- [dcl.ref]: dcl.md#dcl.ref
218
- [declval]: #declval
219
- [default.allocator]: #default.allocator
220
- [defns.const.subexpr]: library.md#defns.const.subexpr
221
- [defns.referenceable]: library.md#defns.referenceable
222
- [execpol]: #execpol
223
- [execpol.general]: #execpol.general
224
- [execpol.objects]: #execpol.objects
225
- [execpol.par]: #execpol.par
226
- [execpol.parunseq]: #execpol.parunseq
227
- [execpol.seq]: #execpol.seq
228
- [execpol.type]: #execpol.type
229
- [execution.syn]: #execution.syn
230
- [expr]: expr.md#expr
231
- [expr.add]: expr.md#expr.add
232
- [expr.alignof]: expr.md#expr.alignof
233
- [expr.bit.and]: expr.md#expr.bit.and
234
- [expr.call]: expr.md#expr.call
235
- [expr.eq]: expr.md#expr.eq
236
- [expr.log.and]: expr.md#expr.log.and
237
- [expr.log.or]: expr.md#expr.log.or
238
- [expr.mul]: expr.md#expr.mul
239
- [expr.or]: expr.md#expr.or
240
- [expr.rel]: expr.md#expr.rel
241
- [expr.unary.op]: expr.md#expr.unary.op
242
- [expr.xor]: expr.md#expr.xor
243
- [forward]: #forward
244
- [forward.iterators]: iterators.md#forward.iterators
245
- [func.bind]: #func.bind
246
- [func.bind.bind]: #func.bind.bind
247
- [func.bind.isbind]: #func.bind.isbind
248
- [func.bind.isplace]: #func.bind.isplace
249
- [func.bind.place]: #func.bind.place
250
- [func.def]: #func.def
251
- [func.invoke]: #func.invoke
252
- [func.memfn]: #func.memfn
253
- [func.not_fn]: #func.not_fn
254
- [func.require]: #func.require
255
- [func.search]: #func.search
256
- [func.search.bm]: #func.search.bm
257
- [func.search.bmh]: #func.search.bmh
258
- [func.search.default]: #func.search.default
259
- [func.wrap]: #func.wrap
260
- [func.wrap.badcall]: #func.wrap.badcall
261
- [func.wrap.badcall.const]: #func.wrap.badcall.const
262
- [func.wrap.func]: #func.wrap.func
263
- [func.wrap.func.alg]: #func.wrap.func.alg
264
- [func.wrap.func.cap]: #func.wrap.func.cap
265
- [func.wrap.func.con]: #func.wrap.func.con
266
- [func.wrap.func.inv]: #func.wrap.func.inv
267
- [func.wrap.func.mod]: #func.wrap.func.mod
268
- [func.wrap.func.nullptr]: #func.wrap.func.nullptr
269
- [func.wrap.func.targ]: #func.wrap.func.targ
270
- [function.objects]: #function.objects
271
- [functional.syn]: #functional.syn
272
- [hash.requirements]: library.md#hash.requirements
273
- [input.iterators]: iterators.md#input.iterators
274
- [intro.multithread]: intro.md#intro.multithread
275
- [intseq]: #intseq
276
- [intseq.general]: #intseq.general
277
- [intseq.intseq]: #intseq.intseq
278
- [intseq.make]: #intseq.make
279
- [invalid.argument]: diagnostics.md#invalid.argument
280
- [iostate.flags]: input.md#iostate.flags
281
- [istream.formatted]: input.md#istream.formatted
282
- [locale.codecvt]: localization.md#locale.codecvt
283
- [logical.operations]: #logical.operations
284
- [logical.operations.and]: #logical.operations.and
285
- [logical.operations.not]: #logical.operations.not
286
- [logical.operations.or]: #logical.operations.or
287
- [mem.poly.allocator.class]: #mem.poly.allocator.class
288
- [mem.poly.allocator.ctor]: #mem.poly.allocator.ctor
289
- [mem.poly.allocator.eq]: #mem.poly.allocator.eq
290
- [mem.poly.allocator.mem]: #mem.poly.allocator.mem
291
- [mem.res]: #mem.res
292
- [mem.res.class]: #mem.res.class
293
- [mem.res.eq]: #mem.res.eq
294
- [mem.res.global]: #mem.res.global
295
- [mem.res.monotonic.buffer]: #mem.res.monotonic.buffer
296
- [mem.res.monotonic.buffer.ctor]: #mem.res.monotonic.buffer.ctor
297
- [mem.res.monotonic.buffer.mem]: #mem.res.monotonic.buffer.mem
298
- [mem.res.pool]: #mem.res.pool
299
- [mem.res.pool.ctor]: #mem.res.pool.ctor
300
- [mem.res.pool.mem]: #mem.res.pool.mem
301
- [mem.res.pool.options]: #mem.res.pool.options
302
- [mem.res.pool.overview]: #mem.res.pool.overview
303
- [mem.res.private]: #mem.res.private
304
- [mem.res.public]: #mem.res.public
305
- [mem.res.syn]: #mem.res.syn
306
- [memory]: #memory
307
- [memory.general]: #memory.general
308
- [memory.syn]: #memory.syn
309
- [meta]: #meta
310
- [meta.help]: #meta.help
311
- [meta.logical]: #meta.logical
312
- [meta.rel]: #meta.rel
313
- [meta.rqmts]: #meta.rqmts
314
- [meta.trans]: #meta.trans
315
- [meta.trans.arr]: #meta.trans.arr
316
- [meta.trans.cv]: #meta.trans.cv
317
- [meta.trans.other]: #meta.trans.other
318
- [meta.trans.ptr]: #meta.trans.ptr
319
- [meta.trans.ref]: #meta.trans.ref
320
- [meta.trans.sign]: #meta.trans.sign
321
- [meta.type.synop]: #meta.type.synop
322
- [meta.unary]: #meta.unary
323
- [meta.unary.cat]: #meta.unary.cat
324
- [meta.unary.comp]: #meta.unary.comp
325
- [meta.unary.prop]: #meta.unary.prop
326
- [meta.unary.prop.query]: #meta.unary.prop.query
327
- [multibyte.strings]: library.md#multibyte.strings
328
- [namespace.std]: library.md#namespace.std
329
- [new.delete]: language.md#new.delete
330
- [nullablepointer.requirements]: library.md#nullablepointer.requirements
331
- [numeric.requirements]: numerics.md#numeric.requirements
332
- [operators]: #operators
333
- [optional]: #optional
334
- [optional.assign]: #optional.assign
335
- [optional.bad.access]: #optional.bad.access
336
- [optional.comp_with_t]: #optional.comp_with_t
337
- [optional.ctor]: #optional.ctor
338
- [optional.dtor]: #optional.dtor
339
- [optional.general]: #optional.general
340
- [optional.hash]: #optional.hash
341
- [optional.mod]: #optional.mod
342
- [optional.nullops]: #optional.nullops
343
- [optional.nullopt]: #optional.nullopt
344
- [optional.observe]: #optional.observe
345
- [optional.optional]: #optional.optional
346
- [optional.relops]: #optional.relops
347
- [optional.specalg]: #optional.specalg
348
- [optional.swap]: #optional.swap
349
- [optional.syn]: #optional.syn
350
- [ostream.formatted]: input.md#ostream.formatted
351
- [out.of.range]: diagnostics.md#out.of.range
352
- [over.match.call]: over.md#over.match.call
353
- [over.match.class.deduct]: over.md#over.match.class.deduct
354
- [overflow.error]: diagnostics.md#overflow.error
355
- [pair.astuple]: #pair.astuple
356
- [pair.piecewise]: #pair.piecewise
357
- [pairs]: #pairs
358
- [pairs.general]: #pairs.general
359
- [pairs.pair]: #pairs.pair
360
- [pairs.spec]: #pairs.spec
361
- [pointer.traits]: #pointer.traits
362
- [pointer.traits.functions]: #pointer.traits.functions
363
- [pointer.traits.types]: #pointer.traits.types
364
- [ptr.align]: #ptr.align
365
- [ratio]: #ratio
366
- [ratio.arithmetic]: #ratio.arithmetic
367
- [ratio.comparison]: #ratio.comparison
368
- [ratio.general]: #ratio.general
369
- [ratio.ratio]: #ratio.ratio
370
- [ratio.si]: #ratio.si
371
- [ratio.syn]: #ratio.syn
372
- [refwrap]: #refwrap
373
- [refwrap.access]: #refwrap.access
374
- [refwrap.assign]: #refwrap.assign
375
- [refwrap.const]: #refwrap.const
376
- [refwrap.helpers]: #refwrap.helpers
377
- [refwrap.invoke]: #refwrap.invoke
378
- [res.on.data.races]: library.md#res.on.data.races
379
- [scoped.adaptor.operators]: #scoped.adaptor.operators
380
- [smartptr]: #smartptr
381
- [special]: special.md#special
382
- [specialized.addressof]: #specialized.addressof
383
- [specialized.algorithms]: #specialized.algorithms
384
- [specialized.destroy]: #specialized.destroy
385
- [stmt.dcl]: stmt.md#stmt.dcl
386
- [string.classes]: strings.md#string.classes
387
- [support.dynamic]: language.md#support.dynamic
388
- [swappable.requirements]: library.md#swappable.requirements
389
- [tab:copyassignable]: #tab:copyassignable
390
- [tab:copyconstructible]: #tab:copyconstructible
391
- [tab:defaultconstructible]: #tab:defaultconstructible
392
- [tab:destructible]: #tab:destructible
393
- [tab:equalitycomparable]: #tab:equalitycomparable
394
- [tab:lessthancomparable]: #tab:lessthancomparable
395
- [tab:moveassignable]: #tab:moveassignable
396
- [tab:moveconstructible]: #tab:moveconstructible
397
- [tab:optional.assign.copy]: #tab:optional.assign.copy
398
- [tab:optional.assign.copy.templ]: #tab:optional.assign.copy.templ
399
- [tab:optional.assign.move]: #tab:optional.assign.move
400
- [tab:optional.assign.move.templ]: #tab:optional.assign.move.templ
401
- [tab:optional.swap]: #tab:optional.swap
402
- [tab:ratio.arithmetic]: #tab:ratio.arithmetic
403
- [tab:time.clock]: #tab:time.clock
404
- [tab:util.lib.summary]: #tab:util.lib.summary
405
- [temp.deduct]: temp.md#temp.deduct
406
- [template.bitset]: #template.bitset
407
- [time]: #time
408
- [time.clock]: #time.clock
409
- [time.clock.hires]: #time.clock.hires
410
- [time.clock.req]: #time.clock.req
411
- [time.clock.steady]: #time.clock.steady
412
- [time.clock.system]: #time.clock.system
413
- [time.duration]: #time.duration
414
- [time.duration.alg]: #time.duration.alg
415
- [time.duration.arithmetic]: #time.duration.arithmetic
416
- [time.duration.cast]: #time.duration.cast
417
- [time.duration.comparisons]: #time.duration.comparisons
418
- [time.duration.cons]: #time.duration.cons
419
- [time.duration.literals]: #time.duration.literals
420
- [time.duration.nonmember]: #time.duration.nonmember
421
- [time.duration.observer]: #time.duration.observer
422
- [time.duration.special]: #time.duration.special
423
- [time.general]: #time.general
424
- [time.point]: #time.point
425
- [time.point.arithmetic]: #time.point.arithmetic
426
- [time.point.cast]: #time.point.cast
427
- [time.point.comparisons]: #time.point.comparisons
428
- [time.point.cons]: #time.point.cons
429
- [time.point.nonmember]: #time.point.nonmember
430
- [time.point.observer]: #time.point.observer
431
- [time.point.special]: #time.point.special
432
- [time.syn]: #time.syn
433
- [time.traits]: #time.traits
434
- [time.traits.duration_values]: #time.traits.duration_values
435
- [time.traits.is_fp]: #time.traits.is_fp
436
- [time.traits.specializations]: #time.traits.specializations
437
- [tuple]: #tuple
438
- [tuple.apply]: #tuple.apply
439
- [tuple.assign]: #tuple.assign
440
- [tuple.cnstr]: #tuple.cnstr
441
- [tuple.creation]: #tuple.creation
442
- [tuple.elem]: #tuple.elem
443
- [tuple.general]: #tuple.general
444
- [tuple.helper]: #tuple.helper
445
- [tuple.rel]: #tuple.rel
446
- [tuple.special]: #tuple.special
447
- [tuple.swap]: #tuple.swap
448
- [tuple.syn]: #tuple.syn
449
- [tuple.traits]: #tuple.traits
450
- [tuple.tuple]: #tuple.tuple
451
- [type.index]: #type.index
452
- [type.index.hash]: #type.index.hash
453
- [type.index.members]: #type.index.members
454
- [type.index.overview]: #type.index.overview
455
- [type.index.synopsis]: #type.index.synopsis
456
- [uninitialized.construct.default]: #uninitialized.construct.default
457
- [uninitialized.construct.value]: #uninitialized.construct.value
458
- [uninitialized.copy]: #uninitialized.copy
459
- [uninitialized.fill]: #uninitialized.fill
460
- [uninitialized.move]: #uninitialized.move
461
- [unique.ptr]: #unique.ptr
462
- [unique.ptr.create]: #unique.ptr.create
463
- [unique.ptr.dltr]: #unique.ptr.dltr
464
- [unique.ptr.dltr.dflt]: #unique.ptr.dltr.dflt
465
- [unique.ptr.dltr.dflt1]: #unique.ptr.dltr.dflt1
466
- [unique.ptr.dltr.general]: #unique.ptr.dltr.general
467
- [unique.ptr.runtime]: #unique.ptr.runtime
468
- [unique.ptr.runtime.asgn]: #unique.ptr.runtime.asgn
469
- [unique.ptr.runtime.ctor]: #unique.ptr.runtime.ctor
470
- [unique.ptr.runtime.modifiers]: #unique.ptr.runtime.modifiers
471
- [unique.ptr.runtime.observers]: #unique.ptr.runtime.observers
472
- [unique.ptr.single]: #unique.ptr.single
473
- [unique.ptr.single.asgn]: #unique.ptr.single.asgn
474
- [unique.ptr.single.ctor]: #unique.ptr.single.ctor
475
- [unique.ptr.single.dtor]: #unique.ptr.single.dtor
476
- [unique.ptr.single.modifiers]: #unique.ptr.single.modifiers
477
- [unique.ptr.single.observers]: #unique.ptr.single.observers
478
- [unique.ptr.special]: #unique.ptr.special
479
- [unord]: containers.md#unord
480
- [unord.hash]: #unord.hash
481
- [util.dynamic.safety]: #util.dynamic.safety
482
- [util.smartptr]: #util.smartptr
483
- [util.smartptr.enab]: #util.smartptr.enab
484
- [util.smartptr.getdeleter]: #util.smartptr.getdeleter
485
- [util.smartptr.hash]: #util.smartptr.hash
486
- [util.smartptr.ownerless]: #util.smartptr.ownerless
487
- [util.smartptr.shared]: #util.smartptr.shared
488
- [util.smartptr.shared.assign]: #util.smartptr.shared.assign
489
- [util.smartptr.shared.atomic]: #util.smartptr.shared.atomic
490
- [util.smartptr.shared.cast]: #util.smartptr.shared.cast
491
- [util.smartptr.shared.cmp]: #util.smartptr.shared.cmp
492
- [util.smartptr.shared.const]: #util.smartptr.shared.const
493
- [util.smartptr.shared.create]: #util.smartptr.shared.create
494
- [util.smartptr.shared.dest]: #util.smartptr.shared.dest
495
- [util.smartptr.shared.io]: #util.smartptr.shared.io
496
- [util.smartptr.shared.mod]: #util.smartptr.shared.mod
497
- [util.smartptr.shared.obs]: #util.smartptr.shared.obs
498
- [util.smartptr.shared.spec]: #util.smartptr.shared.spec
499
- [util.smartptr.weak]: #util.smartptr.weak
500
- [util.smartptr.weak.assign]: #util.smartptr.weak.assign
501
- [util.smartptr.weak.bad]: #util.smartptr.weak.bad
502
- [util.smartptr.weak.const]: #util.smartptr.weak.const
503
- [util.smartptr.weak.dest]: #util.smartptr.weak.dest
504
- [util.smartptr.weak.mod]: #util.smartptr.weak.mod
505
- [util.smartptr.weak.obs]: #util.smartptr.weak.obs
506
- [util.smartptr.weak.spec]: #util.smartptr.weak.spec
507
- [utilities]: #utilities
508
- [utilities.general]: #utilities.general
509
- [utility]: #utility
510
- [utility.as_const]: #utility.as_const
511
- [utility.exchange]: #utility.exchange
512
- [utility.from.chars]: #utility.from.chars
513
- [utility.swap]: #utility.swap
514
- [utility.syn]: #utility.syn
515
- [utility.to.chars]: #utility.to.chars
516
- [variant]: #variant
517
- [variant.assign]: #variant.assign
518
- [variant.bad.access]: #variant.bad.access
519
- [variant.ctor]: #variant.ctor
520
- [variant.dtor]: #variant.dtor
521
- [variant.general]: #variant.general
522
- [variant.get]: #variant.get
523
- [variant.hash]: #variant.hash
524
- [variant.helper]: #variant.helper
525
- [variant.mod]: #variant.mod
526
- [variant.monostate]: #variant.monostate
527
- [variant.monostate.relops]: #variant.monostate.relops
528
- [variant.relops]: #variant.relops
529
- [variant.specalg]: #variant.specalg
530
- [variant.status]: #variant.status
531
- [variant.swap]: #variant.swap
532
- [variant.syn]: #variant.syn
533
- [variant.traits]: #variant.traits
534
- [variant.variant]: #variant.variant
535
- [variant.visit]: #variant.visit
536
-
537
- [^1]: `pointer_safety::preferred` might be returned to indicate that a
538
- leak detector is running so that the program can avoid spurious leak
539
- reports.
540
-
541
- [^2]: Such a type is a function pointer or a class type which has a
542
- member `operator()` or a class type which has a conversion to a
543
- pointer to function.
544
-
545
- [^3]: `strftime` supports the C conversion specifiers `C`, `D`, `e`,
546
- `F`, `g`, `G`, `h`, `r`, `R`, `t`, `T`, `u`, `V`, and `z`, and the
547
- modifiers `E` and `O`.
 
1
  ## Execution policies <a id="execpol">[[execpol]]</a>
2
 
3
  ### In general <a id="execpol.general">[[execpol.general]]</a>
4
 
5
+ Subclause  [[execpol]] describes classes that are *execution policy*
6
+ types. An object of an execution policy type indicates the kinds of
7
+ parallelism allowed in the execution of an algorithm and expresses the
8
+ consequent requirements on the element access functions.
9
 
10
  [*Example 1*:
11
 
12
  ``` cpp
13
  using namespace std;
 
50
  class parallel_policy;
51
 
52
  // [execpol.parunseq], parallel and unsequenced execution policy
53
  class parallel_unsequenced_policy;
54
 
55
+ // [execpol.unseq], unsequenced execution policy
56
+ class unsequenced_policy;
57
+
58
  // [execpol.objects], execution policy objects
59
  inline constexpr sequenced_policy seq{ unspecified };
60
  inline constexpr parallel_policy par{ unspecified };
61
  inline constexpr parallel_unsequenced_policy par_unseq{ unspecified };
62
+ inline constexpr unsequenced_policy unseq{ unspecified };
63
  }
64
  ```
65
 
66
  ### Execution policy type trait <a id="execpol.type">[[execpol.type]]</a>
67
 
 
71
 
72
  `is_execution_policy` can be used to detect execution policies for the
73
  purpose of excluding function signatures from otherwise ambiguous
74
  overload resolution participation.
75
 
76
+ `is_execution_policy<T>` is a *Cpp17UnaryTypeTrait* with a base
77
  characteristic of `true_type` if `T` is the type of a standard or
78
  *implementation-defined* execution policy, otherwise `false_type`.
79
 
80
  [*Note 1*: This provision reserves the privilege of creating
81
  non-standard execution policies to the library
 
94
  as a unique type to disambiguate parallel algorithm overloading and
95
  require that a parallel algorithm’s execution may not be parallelized.
96
 
97
  During the execution of a parallel algorithm with the
98
  `execution::sequenced_policy` policy, if the invocation of an element
99
+ access function exits via an uncaught exception, `terminate()` is
100
  called.
101
 
102
  ### Parallel execution policy <a id="execpol.par">[[execpol.par]]</a>
103
 
104
  ``` cpp
 
109
  as a unique type to disambiguate parallel algorithm overloading and
110
  indicate that a parallel algorithm’s execution may be parallelized.
111
 
112
  During the execution of a parallel algorithm with the
113
  `execution::parallel_policy` policy, if the invocation of an element
114
+ access function exits via an uncaught exception, `terminate()` is
115
  called.
116
 
117
  ### Parallel and unsequenced execution policy <a id="execpol.parunseq">[[execpol.parunseq]]</a>
118
 
119
  ``` cpp
 
126
  parallelized and vectorized.
127
 
128
  During the execution of a parallel algorithm with the
129
  `execution::parallel_unsequenced_policy` policy, if the invocation of an
130
  element access function exits via an uncaught exception, `terminate()`
131
+ is called.
132
+
133
+ ### Unsequenced execution policy <a id="execpol.unseq">[[execpol.unseq]]</a>
134
+
135
+ ``` cpp
136
+ class execution::unsequenced_policy { unspecified };
137
+ ```
138
+
139
+ The class `unsequenced_policy` is an execution policy type used as a
140
+ unique type to disambiguate parallel algorithm overloading and indicate
141
+ that a parallel algorithm’s execution may be vectorized, e.g., executed
142
+ on a single thread using instructions that operate on multiple data
143
+ items.
144
+
145
+ During the execution of a parallel algorithm with the
146
+ `execution::unsequenced_policy` policy, if the invocation of an element
147
+ access function exits via an uncaught exception, `terminate()` is
148
+ called.
149
 
150
  ### Execution policy objects <a id="execpol.objects">[[execpol.objects]]</a>
151
 
152
  ``` cpp
153
  inline constexpr execution::sequenced_policy execution::seq{ unspecified };
154
  inline constexpr execution::parallel_policy execution::par{ unspecified };
155
  inline constexpr execution::parallel_unsequenced_policy execution::par_unseq{ unspecified };
156
+ inline constexpr execution::unsequenced_policy execution::unseq{ unspecified };
157
  ```
158
 
159
  The header `<execution>` declares global objects associated with each
160
  type of execution policy.
161