diff options
Diffstat (limited to 'libcxx/test/std/numerics')
-rw-r--r-- | libcxx/test/std/numerics/numeric.ops/transform.reduce/transform_reduce_iter_iter_iter_init.pass.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/libcxx/test/std/numerics/numeric.ops/transform.reduce/transform_reduce_iter_iter_iter_init.pass.cpp b/libcxx/test/std/numerics/numeric.ops/transform.reduce/transform_reduce_iter_iter_iter_init.pass.cpp index 4f8142afe84..b2c2d714563 100644 --- a/libcxx/test/std/numerics/numeric.ops/transform.reduce/transform_reduce_iter_iter_iter_init.pass.cpp +++ b/libcxx/test/std/numerics/numeric.ops/transform.reduce/transform_reduce_iter_iter_iter_init.pass.cpp @@ -17,7 +17,9 @@ #include <numeric> #include <cassert> +#include <iterator> +#include "MoveOnly.h" #include "test_iterators.h" template <class Iter1, class Iter2, class T> @@ -56,6 +58,24 @@ void test_return_type() decltype(std::transform_reduce(p, p, p, Init{}))> ); } +inline MoveOnly operator+(const MoveOnly& lhs, const MoveOnly& rhs) +{ + return MoveOnly{lhs.get() + rhs.get()}; +} + +inline MoveOnly operator*(const MoveOnly& lhs, const MoveOnly& rhs) +{ + return MoveOnly{lhs.get() * rhs.get()}; +} + +void test_move_only_types() +{ + MoveOnly ia[] = {{1}, {2}, {3}}; + MoveOnly ib[] = {{1}, {2}, {3}}; + assert(14 == + std::transform_reduce(std::begin(ia), std::end(ia), std::begin(ib), MoveOnly{0}).get()); +} + int main() { test_return_type<char, int>(); @@ -92,4 +112,6 @@ int main() test<const int*, unsigned int *>(); test< int*, const unsigned int *>(); test< int*, unsigned int *>(); + + test_move_only_types(); } |