| //===----------------------------------------------------------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| // UNSUPPORTED: c++03, c++11, c++14, c++17 |
| |
| // <memory> |
| // |
| // Make sure we support iterators that return a BooleanTestable in the ranges:: algorithms |
| // defined in <memory>. |
| |
| #include <memory> |
| |
| #include <ranges> |
| |
| #include "boolean_testable.h" |
| |
| using Value = StrictComparable<int>; |
| using Iterator = StrictBooleanIterator<Value*>; |
| using Range = std::ranges::subrange<Iterator>; |
| |
| void f(Iterator it, Range in, Range out, std::size_t n, Value const& val) { |
| // uninitialized_copy |
| { |
| std::ranges::uninitialized_copy(in, out); |
| std::ranges::uninitialized_copy(it, it, it, it); |
| } |
| // uninitialized_copy_n |
| { std::ranges::uninitialized_copy_n(it, n, it, it); } |
| // uninitialized_fill |
| { |
| std::ranges::uninitialized_fill(it, it, val); |
| std::ranges::uninitialized_fill(in, val); |
| } |
| // uninitialized_fill_n |
| { std::ranges::uninitialized_fill_n(it, n, val); } |
| // uninitialized_move |
| { |
| std::ranges::uninitialized_move(it, it, it, it); |
| std::ranges::uninitialized_move(in, out); |
| } |
| // uninitialized_move_n |
| { std::ranges::uninitialized_move_n(it, n, it, it); } |
| // uninitialized_default_construct |
| { |
| std::ranges::uninitialized_default_construct(it, it); |
| std::ranges::uninitialized_default_construct(in); |
| } |
| // uninitialized_default_construct_n |
| { std::ranges::uninitialized_default_construct_n(it, n); } |
| // uninitialized_value_construct |
| { |
| std::ranges::uninitialized_value_construct(it, it); |
| std::ranges::uninitialized_value_construct(in); |
| } |
| // uninitialized_value_construct_n |
| { std::ranges::uninitialized_value_construct_n(it, n); } |
| // destroy |
| { |
| std::ranges::destroy(it, it); |
| std::ranges::destroy(in); |
| } |
| // destroy_n |
| { std::ranges::destroy_n(it, n); } |
| } |