1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8
9 // UNSUPPORTED: c++03, c++11, c++14, c++17
10
11 // <memory>
12 //
13 // Make sure we support iterators that return a BooleanTestable in the ranges:: algorithms
14 // defined in <memory>.
15
16 #include <memory>
17
18 #include <ranges>
19
20 #include "boolean_testable.h"
21
22 using Value = StrictComparable<int>;
23 using Iterator = StrictBooleanIterator<Value*>;
24 using Range = std::ranges::subrange<Iterator>;
25
f(Iterator it,Range in,Range out,std::size_t n,Value const & val)26 void f(Iterator it, Range in, Range out, std::size_t n, Value const& val) {
27 // uninitialized_copy
28 {
29 std::ranges::uninitialized_copy(in, out);
30 std::ranges::uninitialized_copy(it, it, it, it);
31 }
32 // uninitialized_copy_n
33 { std::ranges::uninitialized_copy_n(it, n, it, it); }
34 // uninitialized_fill
35 {
36 std::ranges::uninitialized_fill(it, it, val);
37 std::ranges::uninitialized_fill(in, val);
38 }
39 // uninitialized_fill_n
40 { std::ranges::uninitialized_fill_n(it, n, val); }
41 // uninitialized_move
42 {
43 std::ranges::uninitialized_move(it, it, it, it);
44 std::ranges::uninitialized_move(in, out);
45 }
46 // uninitialized_move_n
47 { std::ranges::uninitialized_move_n(it, n, it, it); }
48 // uninitialized_default_construct
49 {
50 std::ranges::uninitialized_default_construct(it, it);
51 std::ranges::uninitialized_default_construct(in);
52 }
53 // uninitialized_default_construct_n
54 { std::ranges::uninitialized_default_construct_n(it, n); }
55 // uninitialized_value_construct
56 {
57 std::ranges::uninitialized_value_construct(it, it);
58 std::ranges::uninitialized_value_construct(in);
59 }
60 // uninitialized_value_construct_n
61 { std::ranges::uninitialized_value_construct_n(it, n); }
62 // destroy
63 {
64 std::ranges::destroy(it, it);
65 std::ranges::destroy(in);
66 }
67 // destroy_n
68 { std::ranges::destroy_n(it, n); }
69 }
70