[PATCH] D33997: Implement the non-execution policy versions of `reduce` and `transform_reduce` for C++17
Richard Smith - zygoloid via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Jun 8 14:24:32 PDT 2017
rsmith added inline comments.
================
Comment at: include/numeric:145
+{
+ return reduce(__first, __last, __init, _VSTD::plus<>());
+}
----------------
Missing _VSTD::
================
Comment at: include/numeric:153
+{
+ return reduce(__first, __last,
+ typename iterator_traits<_InputIterator>::value_type{}, _VSTD::plus<>());
----------------
Missing _VSTD::
================
Comment at: include/numeric:209
+{
+ return transform_reduce(__first1, __last1, __first2, __init, _VSTD::plus<>(), _VSTD::multiplies<>());
+}
----------------
Missing _VSTD::
================
Comment at: test/std/numerics/numeric.ops/reduce/reduce_iter_iter.pass.cpp:26
+{
+ static_assert( std::is_same<typename std::iterator_traits<decltype(first)>::value_type,
+ decltype(std::reduce(first, last))>::value, "" );
----------------
Maybe use _v trait?
================
Comment at: test/std/numerics/numeric.ops/reduce/reduce_iter_iter.pass.cpp:27
+ static_assert( std::is_same<typename std::iterator_traits<decltype(first)>::value_type,
+ decltype(std::reduce(first, last))>::value, "" );
+ assert(std::reduce(first, last) == x);
----------------
May as well drop the `, ""` since this test requires C++17 anyway.
================
Comment at: test/std/numerics/numeric.ops/reduce/reduce_iter_iter.pass.cpp:37
+ unsigned sa = sizeof(ia) / sizeof(ia[0]);
+ test(Iter(ia), Iter(ia), 0);
+ test(Iter(ia), Iter(ia+1), 1);
----------------
wash wrote:
> Just to confirm, this should be 0 because the "default" init value is `iterator_traits<_InputIterator>::value_type{}`, and `int{}` gives you a determinate result (as opposed to `int()` which would not), correct?
`int()` also gives a determinate result.
================
Comment at: test/std/numerics/numeric.ops/transform.reduce/transform_reduce_iter_iter_init_bop_uop.pass.cpp:36
+ _NOEXCEPT_(noexcept(_VSTD::forward<_Tp>(__x)))
+ -> decltype (_VSTD::forward<_Tp>(__x))
+ { return _VSTD::forward<_Tp>(__x); }
----------------
Maybe use `decltype(auto)` here?
================
Comment at: test/std/numerics/numeric.ops/transform.reduce/transform_reduce_iter_iter_iter_init_op_op.pass.cpp:41
+ unsigned sa = sizeof(ia) / sizeof(ia[0]);
+ assert(sa == sizeof(ua) / sizeof(ua[0])); // just to be sure
+
----------------
You could static_assert this if you make sa const.
https://reviews.llvm.org/D33997
More information about the cfe-commits
mailing list