@@ -224,7 +224,8 @@ struct MakeIterator
224
224
225
225
// Useful constant variables
226
226
constexpr ::std::size_t GuardSize = 5 ;
227
- constexpr ::std::size_t sizeLimit = 1000 ;
227
+ template <typename T>
228
+ constexpr T sizeLimit = 1000 ;
228
229
// Construction below is needed for using SFINAE-friendliness that available in C++17
229
230
230
231
template <typename Iter, typename Void = void > // local iterator_traits for non-iterators
@@ -377,39 +378,41 @@ struct iterator_invoker
377
378
::std::enable_if_t <is_base_of_iterator_category<::std::random_access_iterator_tag, Iterator>::value>
378
379
operator ()(Policy&& exec, Op op, Iterator begin, typename ::std::iterator_traits<Iterator>::difference_type n, Rest&&... rest)
379
380
{
380
- invoke_if<Iterator>()(n <= sizeLimit, op, exec, make_iterator <Iterator>()(begin), n ,
381
- ::std::forward<Rest>(rest)...);
381
+ invoke_if<Iterator>()(n <= sizeLimit< typename std::iterator_traits <Iterator>::difference_type>, op, exec ,
382
+ make_iterator<Iterator>()(begin), n, ::std::forward<Rest>(rest)...);
382
383
}
383
384
384
385
template <typename Policy, typename Op, typename Iterator, typename ... Rest>
385
386
::std::enable_if_t <is_base_of_iterator_category<::std::random_access_iterator_tag, Iterator>::value &&
386
387
!::std::is_base_of_v<non_const_wrapper, Op>>
387
388
operator ()(Policy&& exec, Op op, Iterator inputBegin, Iterator inputEnd, Rest&&... rest)
388
389
{
389
- invoke_if<Iterator>()(:: std::distance (inputBegin, inputEnd) <= sizeLimit, op, exec,
390
- make_iterator<Iterator>() (inputBegin), make_iterator<Iterator>()( inputEnd),
391
- :: std::forward<Rest>(rest)...);
390
+ invoke_if<Iterator>()(
391
+ std::distance (inputBegin, inputEnd) <= sizeLimit< decltype ( std::distance (inputBegin, inputEnd))>, op, exec ,
392
+ make_iterator<Iterator>()(inputBegin), make_iterator<Iterator>()(inputEnd), std::forward<Rest>(rest)...);
392
393
}
393
394
394
395
template <typename Policy, typename Op, typename InputIterator, typename OutputIterator, typename ... Rest>
395
396
::std::enable_if_t <is_base_of_iterator_category<::std::random_access_iterator_tag, OutputIterator>::value>
396
397
operator ()(Policy&& exec, Op op, InputIterator inputBegin, InputIterator inputEnd, OutputIterator outputBegin,
397
398
Rest&&... rest)
398
399
{
399
- invoke_if<InputIterator>()(::std::distance (inputBegin, inputEnd) <= sizeLimit, op, exec,
400
- make_iterator<InputIterator>()(inputBegin), make_iterator<InputIterator>()(inputEnd),
401
- make_iterator<OutputIterator>()(outputBegin), ::std::forward<Rest>(rest)...);
400
+ invoke_if<InputIterator>()(
401
+ std::distance (inputBegin, inputEnd) <= sizeLimit<decltype (std::distance (inputBegin, inputEnd))>, op, exec,
402
+ make_iterator<InputIterator>()(inputBegin), make_iterator<InputIterator>()(inputEnd),
403
+ make_iterator<OutputIterator>()(outputBegin), std::forward<Rest>(rest)...);
402
404
}
403
405
404
406
template <typename Policy, typename Op, typename InputIterator, typename OutputIterator, typename ... Rest>
405
407
::std::enable_if_t <is_base_of_iterator_category<::std::random_access_iterator_tag, OutputIterator>::value>
406
408
operator ()(Policy&& exec, Op op, InputIterator inputBegin, InputIterator inputEnd, OutputIterator outputBegin,
407
409
OutputIterator outputEnd, Rest&&... rest)
408
410
{
409
- invoke_if<InputIterator>()(::std::distance (inputBegin, inputEnd) <= sizeLimit, op, exec,
410
- make_iterator<InputIterator>()(inputBegin), make_iterator<InputIterator>()(inputEnd),
411
- make_iterator<OutputIterator>()(outputBegin),
412
- make_iterator<OutputIterator>()(outputEnd), ::std::forward<Rest>(rest)...);
411
+ invoke_if<InputIterator>()(
412
+ std::distance (inputBegin, inputEnd) <= sizeLimit<decltype (std::distance (inputBegin, inputEnd))>, op, exec,
413
+ make_iterator<InputIterator>()(inputBegin), make_iterator<InputIterator>()(inputEnd),
414
+ make_iterator<OutputIterator>()(outputBegin), make_iterator<OutputIterator>()(outputEnd),
415
+ std::forward<Rest>(rest)...);
413
416
}
414
417
415
418
template <typename Policy, typename Op, typename InputIterator1, typename InputIterator2, typename OutputIterator,
@@ -419,10 +422,11 @@ struct iterator_invoker
419
422
InputIterator2 inputEnd2, OutputIterator outputBegin, OutputIterator outputEnd, Rest&&... rest)
420
423
{
421
424
invoke_if<InputIterator1>()(
422
- ::std::distance (inputBegin1, inputEnd1) <= sizeLimit, op, exec, make_iterator<InputIterator1>()(inputBegin1),
423
- make_iterator<InputIterator1>()(inputEnd1), make_iterator<InputIterator2>()(inputBegin2),
424
- make_iterator<InputIterator2>()(inputEnd2), make_iterator<OutputIterator>()(outputBegin),
425
- make_iterator<OutputIterator>()(outputEnd), ::std::forward<Rest>(rest)...);
425
+ std::distance (inputBegin1, inputEnd1) <= sizeLimit<decltype (std::distance (inputBegin1, inputEnd1))>, op,
426
+ exec, make_iterator<InputIterator1>()(inputBegin1), make_iterator<InputIterator1>()(inputEnd1),
427
+ make_iterator<InputIterator2>()(inputBegin2), make_iterator<InputIterator2>()(inputEnd2),
428
+ make_iterator<OutputIterator>()(outputBegin), make_iterator<OutputIterator>()(outputEnd),
429
+ std::forward<Rest>(rest)...);
426
430
}
427
431
428
432
template <typename Policy, typename Op, typename InputIterator1, typename InputIterator2, typename InputIterator3, typename OutputIterator,
@@ -433,11 +437,12 @@ struct iterator_invoker
433
437
OutputIterator outputBegin, OutputIterator outputEnd, Rest&&... rest)
434
438
{
435
439
invoke_if<InputIterator1>()(
436
- ::std::distance (inputBegin1, inputEnd1) <= sizeLimit, op, exec, make_iterator<InputIterator1>()(inputBegin1),
437
- make_iterator<InputIterator1>()(inputEnd1), make_iterator<InputIterator2>()(inputBegin2),
438
- make_iterator<InputIterator2>()(inputEnd2), make_iterator<InputIterator3>()(inputBegin3),
439
- make_iterator<InputIterator3>()(inputEnd3), make_iterator<OutputIterator>()(outputBegin),
440
- make_iterator<OutputIterator>()(outputEnd), ::std::forward<Rest>(rest)...);
440
+ std::distance (inputBegin1, inputEnd1) <= sizeLimit<decltype (std::distance (inputBegin1, inputEnd1))>, op,
441
+ exec, make_iterator<InputIterator1>()(inputBegin1), make_iterator<InputIterator1>()(inputEnd1),
442
+ make_iterator<InputIterator2>()(inputBegin2), make_iterator<InputIterator2>()(inputEnd2),
443
+ make_iterator<InputIterator3>()(inputBegin3), make_iterator<InputIterator3>()(inputEnd3),
444
+ make_iterator<OutputIterator>()(outputBegin), make_iterator<OutputIterator>()(outputEnd),
445
+ std::forward<Rest>(rest)...);
441
446
}
442
447
};
443
448
@@ -473,7 +478,7 @@ struct iterator_invoker<IteratorTag, /* IsReverse = */ ::std::true_type>
473
478
::std::enable_if_t <is_base_of_iterator_category<::std::random_access_iterator_tag, Iterator>::value>
474
479
operator ()(Policy&& exec, Op op, Iterator begin, typename ::std::iterator_traits<Iterator>::difference_type n, Rest&&... rest)
475
480
{
476
- if (n <= sizeLimit)
481
+ if (n <= sizeLimit< decltype (n)> )
477
482
op (exec, make_iterator<Iterator>()(begin + n), n, ::std::forward<Rest>(rest)...);
478
483
}
479
484
@@ -482,15 +487,15 @@ struct iterator_invoker<IteratorTag, /* IsReverse = */ ::std::true_type>
482
487
operator ()(Policy&& exec, Op op, Iterator begin, typename ::std::iterator_traits<Iterator>::difference_type n, Iterator expected,
483
488
Rest&&... rest)
484
489
{
485
- if (n <= sizeLimit)
490
+ if (n <= sizeLimit< decltype (n)> )
486
491
op (exec, make_iterator<Iterator>()(begin + n), n, make_iterator<Iterator>()(expected + n), ::std::forward<Rest>(rest)...);
487
492
}
488
493
489
494
template <typename Policy, typename Op, typename Iterator, typename ... Rest>
490
495
::std::enable_if_t <is_same_iterator_category_v<Iterator, ::std::bidirectional_iterator_tag>>
491
496
operator ()(Policy&& exec, Op op, Iterator begin, typename ::std::iterator_traits<Iterator>::difference_type n, Iterator expected, Rest&&... rest)
492
497
{
493
- if (n <= sizeLimit)
498
+ if (n <= sizeLimit< decltype (n)> )
494
499
op (exec, make_iterator<Iterator>()(std::next (begin, n)), n, make_iterator<Iterator>()(std::next (expected, n)), ::std::forward<Rest>(rest)...);
495
500
}
496
501
@@ -499,30 +504,30 @@ struct iterator_invoker<IteratorTag, /* IsReverse = */ ::std::true_type>
499
504
!::std::is_base_of_v<non_const_wrapper, Op>>
500
505
operator ()(Policy&& exec, Op op, Iterator inputBegin, Iterator inputEnd, Rest&&... rest)
501
506
{
502
- if (:: std::distance (inputBegin, inputEnd) <= sizeLimit)
507
+ if (std::distance (inputBegin, inputEnd) <= sizeLimit< decltype ( std::distance (inputBegin, inputEnd))> )
503
508
op (exec, make_iterator<Iterator>()(inputEnd), make_iterator<Iterator>()(inputBegin),
504
- :: std::forward<Rest>(rest)...);
509
+ std::forward<Rest>(rest)...);
505
510
}
506
511
507
512
template <typename Policy, typename Op, typename InputIterator, typename OutputIterator, typename ... Rest>
508
513
::std::enable_if_t <is_base_of_iterator_category<::std::random_access_iterator_tag, OutputIterator>::value>
509
514
operator ()(Policy&& exec, Op op, InputIterator inputBegin, InputIterator inputEnd, OutputIterator outputBegin,
510
515
Rest&&... rest)
511
516
{
512
- if (:: std::distance (inputBegin, inputEnd) <= sizeLimit)
517
+ if (std::distance (inputBegin, inputEnd) <= sizeLimit< decltype ( std::distance (inputBegin, inputEnd))> )
513
518
op (exec, make_iterator<InputIterator>()(inputEnd), make_iterator<InputIterator>()(inputBegin),
514
- make_iterator<OutputIterator>()(outputBegin + (inputEnd - inputBegin)), :: std::forward<Rest>(rest)...);
519
+ make_iterator<OutputIterator>()(outputBegin + (inputEnd - inputBegin)), std::forward<Rest>(rest)...);
515
520
}
516
521
517
522
template <typename Policy, typename Op, typename InputIterator, typename OutputIterator, typename ... Rest>
518
523
::std::enable_if_t <is_base_of_iterator_category<::std::random_access_iterator_tag, OutputIterator>::value>
519
524
operator ()(Policy&& exec, Op op, InputIterator inputBegin, InputIterator inputEnd, OutputIterator outputBegin,
520
525
OutputIterator outputEnd, Rest&&... rest)
521
526
{
522
- if (:: std::distance (inputBegin, inputEnd) <= sizeLimit)
527
+ if (std::distance (inputBegin, inputEnd) <= sizeLimit< decltype ( std::distance (inputBegin, inputEnd))> )
523
528
op (exec, make_iterator<InputIterator>()(inputEnd), make_iterator<InputIterator>()(inputBegin),
524
529
make_iterator<OutputIterator>()(outputEnd), make_iterator<OutputIterator>()(outputBegin),
525
- :: std::forward<Rest>(rest)...);
530
+ std::forward<Rest>(rest)...);
526
531
}
527
532
528
533
template <typename Policy, typename Op, typename InputIterator1, typename InputIterator2, typename OutputIterator,
@@ -531,11 +536,11 @@ struct iterator_invoker<IteratorTag, /* IsReverse = */ ::std::true_type>
531
536
operator ()(Policy&& exec, Op op, InputIterator1 inputBegin1, InputIterator1 inputEnd1, InputIterator2 inputBegin2,
532
537
InputIterator2 inputEnd2, OutputIterator outputBegin, OutputIterator outputEnd, Rest&&... rest)
533
538
{
534
- if (:: std::distance (inputBegin1, inputEnd1) <= sizeLimit)
539
+ if (std::distance (inputBegin1, inputEnd1) <= sizeLimit< decltype ( std::distance (inputBegin1, inputEnd1))> )
535
540
op (exec, make_iterator<InputIterator1>()(inputEnd1), make_iterator<InputIterator1>()(inputBegin1),
536
541
make_iterator<InputIterator2>()(inputEnd2), make_iterator<InputIterator2>()(inputBegin2),
537
542
make_iterator<OutputIterator>()(outputEnd), make_iterator<OutputIterator>()(outputBegin),
538
- :: std::forward<Rest>(rest)...);
543
+ std::forward<Rest>(rest)...);
539
544
}
540
545
541
546
template <typename Policy, typename Op, typename InputIterator1, typename InputIterator2, typename InputIterator3,
@@ -545,12 +550,12 @@ struct iterator_invoker<IteratorTag, /* IsReverse = */ ::std::true_type>
545
550
InputIterator2 inputEnd2, InputIterator3 inputBegin3, InputIterator3 inputEnd3,
546
551
OutputIterator outputBegin, OutputIterator outputEnd, Rest&&... rest)
547
552
{
548
- if (:: std::distance (inputBegin1, inputEnd1) <= sizeLimit)
553
+ if (std::distance (inputBegin1, inputEnd1) <= sizeLimit< decltype ( std::distance (inputBegin1, inputEnd1))> )
549
554
op (exec, make_iterator<InputIterator1>()(inputEnd1), make_iterator<InputIterator1>()(inputBegin1),
550
555
make_iterator<InputIterator2>()(inputEnd2), make_iterator<InputIterator2>()(inputBegin2),
551
556
make_iterator<InputIterator3>()(inputEnd3), make_iterator<InputIterator3>()(inputBegin3),
552
557
make_iterator<OutputIterator>()(outputEnd), make_iterator<OutputIterator>()(outputBegin),
553
- :: std::forward<Rest>(rest)...);
558
+ std::forward<Rest>(rest)...);
554
559
}
555
560
556
561
};
0 commit comments