|
262 | 262 | The number and order of deducible template parameters for algorithm declarations |
263 | 263 | are unspecified, except where explicitly stated otherwise. |
264 | 264 | \begin{note} |
265 | | -Consequently, the algorithms may not |
266 | | -be called with explicitly-specified template argument lists. |
| 265 | +Consequently, an implementation can reject calls |
| 266 | +that specify an explicit template argument list. |
267 | 267 | \end{note} |
268 | 268 |
|
269 | 269 | \rSec1[algorithms.parallel]{Parallel algorithms} |
|
389 | 389 | where \tcode{is_trivially_copy_constructible_v<T>} |
390 | 390 | and \tcode{is_trivially_destructible_v<T>} are \tcode{true}. |
391 | 391 | \begin{note} |
392 | | -This implies that user-supplied function objects should not rely on |
| 392 | +This implies that user-supplied function objects cannot rely on |
393 | 393 | object identity of arguments for such input sequences. |
394 | 394 | Users for whom the object identity of the arguments to these function objects |
395 | 395 | is important should consider using a wrapping iterator |
|
414 | 414 | unsequenced with respect to one another in the calling thread of execution. |
415 | 415 | \begin{note} |
416 | 416 | This means that multiple function object invocations |
417 | | -may be interleaved on a single thread of execution, |
| 417 | +can be interleaved on a single thread of execution, |
418 | 418 | which overrides the usual guarantee from \ref{intro.execution} |
419 | 419 | that function executions do not overlap with one another. |
420 | 420 | \end{note} |
|
500 | 500 | or threads of execution implicitly created by the library; |
501 | 501 | the latter will provide weakly parallel forward progress guarantees. |
502 | 502 | \begin{note} |
503 | | -This means that multiple function object invocations may be interleaved |
| 503 | +This means that multiple function object invocations can be interleaved |
504 | 504 | on a single thread of execution, |
505 | 505 | which overrides the usual guarantee from \ref{intro.execution} |
506 | 506 | that function executions do not overlap with one another. |
|
3153 | 3153 | starting from \tcode{first} and proceeding to \tcode{last - 1}. |
3154 | 3154 | \begin{note} |
3155 | 3155 | If the type of \tcode{first} meets the requirements of a mutable iterator, |
3156 | | -\tcode{f} may apply non-constant functions through the dereferenced iterator. |
| 3156 | +\tcode{f} can apply non-constant functions through the dereferenced iterator. |
3157 | 3157 | \end{note} |
3158 | 3158 |
|
3159 | 3159 | \pnum |
|
3188 | 3188 | every iterator in the range \range{first}{last}. |
3189 | 3189 | \begin{note} |
3190 | 3190 | If the type of \tcode{first} meets the requirements of a mutable iterator, |
3191 | | -\tcode{f} may apply non-constant functions through the dereferenced iterator. |
| 3191 | +\tcode{f} can apply non-constant functions through the dereferenced iterator. |
3192 | 3192 | \end{note} |
3193 | 3193 |
|
3194 | 3194 | \pnum |
|
3205 | 3205 | \pnum |
3206 | 3206 | \begin{note} |
3207 | 3207 | Does not return a copy of its \tcode{Function} parameter, |
3208 | | -since parallelization may not permit efficient state accumulation. |
| 3208 | +since parallelization often does not permit efficient state accumulation. |
3209 | 3209 | \end{note} |
3210 | 3210 | \end{itemdescr} |
3211 | 3211 |
|
|
3229 | 3229 | starting from \tcode{first} and proceeding to \tcode{last - 1}. |
3230 | 3230 | \begin{note} |
3231 | 3231 | If the result of \tcode{invoke(proj, *i)} is a mutable reference, |
3232 | | -\tcode{f} may apply non-constant functions. |
| 3232 | +\tcode{f} can apply non-constant functions. |
3233 | 3233 | \end{note} |
3234 | 3234 |
|
3235 | 3235 | \pnum |
|
3278 | 3278 | every iterator in the range \range{first}{first + n} in order. |
3279 | 3279 | \begin{note} |
3280 | 3280 | If the type of \tcode{first} meets the requirements of a mutable iterator, |
3281 | | -\tcode{f} may apply non-constant functions through the dereferenced iterator. |
| 3281 | +\tcode{f} can apply non-constant functions through the dereferenced iterator. |
3282 | 3282 | \end{note} |
3283 | 3283 |
|
3284 | 3284 | \pnum |
|
3314 | 3314 | every iterator in the range \range{first}{first + n}. |
3315 | 3315 | \begin{note} |
3316 | 3316 | If the type of \tcode{first} meets the requirements of a mutable iterator, |
3317 | | -\tcode{f} may apply non-constant functions through the dereferenced iterator. |
| 3317 | +\tcode{f} can apply non-constant functions through the dereferenced iterator. |
3318 | 3318 | \end{note} |
3319 | 3319 |
|
3320 | 3320 | \pnum |
|
3349 | 3349 | \range{first}{first + n} in order. |
3350 | 3350 | \begin{note} |
3351 | 3351 | If the result of \tcode{invoke(proj, *i)} is a mutable reference, |
3352 | | -\tcode{f} may apply non-constant functions. |
| 3352 | +\tcode{f} can apply non-constant functions. |
3353 | 3353 | \end{note} |
3354 | 3354 |
|
3355 | 3355 | \pnum |
|
4389 | 4389 | do not overlap. |
4390 | 4390 | \begin{note} |
4391 | 4391 | For the overload with an \tcode{ExecutionPolicy}, |
4392 | | -there may be a performance cost |
| 4392 | +there might be a performance cost |
4393 | 4393 | if \tcode{iterator_traits<For\-ward\-It\-er\-ator1>::value_type} |
4394 | 4394 | is not \oldconcept{\-Move\-Constructible} (\tref{cpp17.moveconstructible}). |
4395 | 4395 | \end{note} |
|
5287 | 5287 | do not overlap. |
5288 | 5288 | \begin{note} |
5289 | 5289 | For the overloads with an \tcode{ExecutionPolicy}, |
5290 | | -there may be a performance cost |
| 5290 | +there might be a performance cost |
5291 | 5291 | if \tcode{iterator_traits<ForwardIterator1>::value_type} does not meet |
5292 | 5292 | the \oldconcept{\-Move\-Constructible} (\tref{cpp17.moveconstructible}) requirements. |
5293 | 5293 | \end{note} |
|
5474 | 5474 | \oldconcept{CopyAssignable} requirements. |
5475 | 5475 | \begin{note} |
5476 | 5476 | For the overloads with an \tcode{ExecutionPolicy}, |
5477 | | - there may be a performance cost |
| 5477 | + there might be a performance cost |
5478 | 5478 | if the value type of \tcode{ForwardIterator1} does not meet both the |
5479 | 5479 | \oldconcept{CopyConstructible} and \oldconcept{CopyAssignable} requirements. |
5480 | 5480 | \end{note} |
|
7009 | 7009 |
|
7010 | 7010 | \begin{note} |
7011 | 7011 | For the overload with an \tcode{ExecutionPolicy}, |
7012 | | -there may be a performance cost if \tcode{first}'s value type |
| 7012 | +there might be a performance cost if \tcode{first}'s value type |
7013 | 7013 | does not meet the \oldconcept{CopyConstructible} requirements. |
7014 | 7014 | \end{note} |
7015 | 7015 |
|
|
9527 | 9527 | that \tcode{exclusive_scan} excludes the $i^\text{th}$ input element |
9528 | 9528 | from the $i^\text{th}$ sum. |
9529 | 9529 | If \tcode{binary_op} is not mathematically associative, |
9530 | | -the behavior of \tcode{exclusive_scan} may be nondeterministic. |
| 9530 | +the behavior of \tcode{exclusive_scan} might be nondeterministic. |
9531 | 9531 | \end{note} |
9532 | 9532 | \end{itemdescr} |
9533 | 9533 |
|
|
9654 | 9654 | that \tcode{inclusive_scan} includes the $i^\text{th}$ input element |
9655 | 9655 | in the $i^\text{th}$ sum. |
9656 | 9656 | If \tcode{binary_op} is not mathematically associative, |
9657 | | -the behavior of \tcode{inclusive_scan} may be nondeterministic. |
| 9657 | +the behavior of \tcode{inclusive_scan} might be nondeterministic. |
9658 | 9658 | \end{note} |
9659 | 9659 | \end{itemdescr} |
9660 | 9660 |
|
|
9729 | 9729 | \tcode{transform_inclusive_scan} is that \tcode{trans\-form\-_\-exclusive_scan} |
9730 | 9730 | excludes the $i^\text{th}$ input element from the $i^\text{th}$ sum. |
9731 | 9731 | If \tcode{binary_op} is not mathematically associative, |
9732 | | -the behavior of \tcode{transform_exclusive_scan} may be nondeterministic. |
| 9732 | +the behavior of \tcode{transform_exclusive_scan} might be nondeterministic. |
9733 | 9733 | \tcode{transform_exclusive_scan} |
9734 | 9734 | does not apply \tcode{unary_op} to \tcode{init}. |
9735 | 9735 | \end{note} |
|
9833 | 9833 | \tcode{transform_inclusive_scan} is that \tcode{trans\-form\-_\-inclusive_scan} |
9834 | 9834 | includes the $i^\text{th}$ input element in the $i^\text{th}$ sum. |
9835 | 9835 | If \tcode{binary_op} is not mathematically associative, |
9836 | | -the behavior of \tcode{transform_inclusive_scan} may be nondeterministic. |
| 9836 | +the behavior of \tcode{transform_inclusive_scan} might be nondeterministic. |
9837 | 9837 | \tcode{transform_inclusive_scan} does not |
9838 | 9838 | apply \tcode{unary_op} to \tcode{init}. |
9839 | 9839 | \end{note} |
|
0 commit comments