xref: /freebsd/contrib/llvm-project/libcxx/modules/std/memory.inc (revision 5f757f3ff9144b609b3c433dfd370cc6bdc191ad)
1*5f757f3fSDimitry Andric// -*- C++ -*-
2*5f757f3fSDimitry Andric//===----------------------------------------------------------------------===//
3*5f757f3fSDimitry Andric//
4*5f757f3fSDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5*5f757f3fSDimitry Andric// See https://llvm.org/LICENSE.txt for license information.
6*5f757f3fSDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7*5f757f3fSDimitry Andric//
8*5f757f3fSDimitry Andric//===----------------------------------------------------------------------===//
9*5f757f3fSDimitry Andric
10*5f757f3fSDimitry Andricexport namespace std {
11*5f757f3fSDimitry Andric  // [pointer.traits], pointer traits
12*5f757f3fSDimitry Andric  using std::pointer_traits;
13*5f757f3fSDimitry Andric
14*5f757f3fSDimitry Andric  // [pointer.conversion], pointer conversion
15*5f757f3fSDimitry Andric  using std::to_address;
16*5f757f3fSDimitry Andric
17*5f757f3fSDimitry Andric  // [ptr.align], pointer alignment
18*5f757f3fSDimitry Andric  using std::align;
19*5f757f3fSDimitry Andric  using std::assume_aligned;
20*5f757f3fSDimitry Andric
21*5f757f3fSDimitry Andric  // [obj.lifetime], explicit lifetime management
22*5f757f3fSDimitry Andric  //  using std::start_lifetime_as;
23*5f757f3fSDimitry Andric  //  using std::start_lifetime_as_array;
24*5f757f3fSDimitry Andric
25*5f757f3fSDimitry Andric  // [allocator.tag], allocator argument tag
26*5f757f3fSDimitry Andric  using std::allocator_arg;
27*5f757f3fSDimitry Andric  using std::allocator_arg_t;
28*5f757f3fSDimitry Andric
29*5f757f3fSDimitry Andric  // [allocator.uses], uses_allocator
30*5f757f3fSDimitry Andric  using std::uses_allocator;
31*5f757f3fSDimitry Andric
32*5f757f3fSDimitry Andric  // [allocator.uses.trait], uses_allocator
33*5f757f3fSDimitry Andric  using std::uses_allocator_v;
34*5f757f3fSDimitry Andric
35*5f757f3fSDimitry Andric  // [allocator.uses.construction], uses-allocator construction
36*5f757f3fSDimitry Andric  using std::uses_allocator_construction_args;
37*5f757f3fSDimitry Andric
38*5f757f3fSDimitry Andric  using std::make_obj_using_allocator;
39*5f757f3fSDimitry Andric  using std::uninitialized_construct_using_allocator;
40*5f757f3fSDimitry Andric
41*5f757f3fSDimitry Andric  // [allocator.traits], allocator traits
42*5f757f3fSDimitry Andric  using std::allocator_traits;
43*5f757f3fSDimitry Andric
44*5f757f3fSDimitry Andric#if _LIBCPP_STD_VER >= 23
45*5f757f3fSDimitry Andric  using std::allocation_result;
46*5f757f3fSDimitry Andric
47*5f757f3fSDimitry Andric  using std::allocate_at_least;
48*5f757f3fSDimitry Andric#endif
49*5f757f3fSDimitry Andric
50*5f757f3fSDimitry Andric  // [default.allocator], the default allocator
51*5f757f3fSDimitry Andric  using std::allocator;
52*5f757f3fSDimitry Andric  using std::operator==;
53*5f757f3fSDimitry Andric
54*5f757f3fSDimitry Andric  // [specialized.addressof], addressof
55*5f757f3fSDimitry Andric  using std::addressof;
56*5f757f3fSDimitry Andric
57*5f757f3fSDimitry Andric  // [specialized.algorithms], specialized algorithms
58*5f757f3fSDimitry Andric  // [special.mem.concepts], special memory concepts
59*5f757f3fSDimitry Andric
60*5f757f3fSDimitry Andric  using std::uninitialized_default_construct;
61*5f757f3fSDimitry Andric  using std::uninitialized_default_construct_n;
62*5f757f3fSDimitry Andric
63*5f757f3fSDimitry Andric  namespace ranges {
64*5f757f3fSDimitry Andric    using std::ranges::uninitialized_default_construct;
65*5f757f3fSDimitry Andric    using std::ranges::uninitialized_default_construct_n;
66*5f757f3fSDimitry Andric  } // namespace ranges
67*5f757f3fSDimitry Andric
68*5f757f3fSDimitry Andric  using std::uninitialized_value_construct;
69*5f757f3fSDimitry Andric  using std::uninitialized_value_construct_n;
70*5f757f3fSDimitry Andric
71*5f757f3fSDimitry Andric  namespace ranges {
72*5f757f3fSDimitry Andric    using std::ranges::uninitialized_value_construct;
73*5f757f3fSDimitry Andric    using std::ranges::uninitialized_value_construct_n;
74*5f757f3fSDimitry Andric  } // namespace ranges
75*5f757f3fSDimitry Andric
76*5f757f3fSDimitry Andric  using std::uninitialized_copy;
77*5f757f3fSDimitry Andric  using std::uninitialized_copy_n;
78*5f757f3fSDimitry Andric
79*5f757f3fSDimitry Andric  namespace ranges {
80*5f757f3fSDimitry Andric    using std::ranges::uninitialized_copy;
81*5f757f3fSDimitry Andric    using std::ranges::uninitialized_copy_result;
82*5f757f3fSDimitry Andric
83*5f757f3fSDimitry Andric    using std::ranges::uninitialized_copy_n;
84*5f757f3fSDimitry Andric    using std::ranges::uninitialized_copy_n_result;
85*5f757f3fSDimitry Andric  } // namespace ranges
86*5f757f3fSDimitry Andric
87*5f757f3fSDimitry Andric  using std::uninitialized_move;
88*5f757f3fSDimitry Andric  using std::uninitialized_move_n;
89*5f757f3fSDimitry Andric
90*5f757f3fSDimitry Andric  namespace ranges {
91*5f757f3fSDimitry Andric    using std::ranges::uninitialized_move;
92*5f757f3fSDimitry Andric    using std::ranges::uninitialized_move_result;
93*5f757f3fSDimitry Andric
94*5f757f3fSDimitry Andric    using std::ranges::uninitialized_move_n;
95*5f757f3fSDimitry Andric    using std::ranges::uninitialized_move_n_result;
96*5f757f3fSDimitry Andric  } // namespace ranges
97*5f757f3fSDimitry Andric
98*5f757f3fSDimitry Andric  using std::uninitialized_fill;
99*5f757f3fSDimitry Andric  using std::uninitialized_fill_n;
100*5f757f3fSDimitry Andric
101*5f757f3fSDimitry Andric  namespace ranges {
102*5f757f3fSDimitry Andric    using std::ranges::uninitialized_fill;
103*5f757f3fSDimitry Andric    using std::ranges::uninitialized_fill_n;
104*5f757f3fSDimitry Andric  } // namespace ranges
105*5f757f3fSDimitry Andric
106*5f757f3fSDimitry Andric  // [specialized.construct], construct_at
107*5f757f3fSDimitry Andric  using std::construct_at;
108*5f757f3fSDimitry Andric
109*5f757f3fSDimitry Andric  namespace ranges {
110*5f757f3fSDimitry Andric    using std::ranges::construct_at;
111*5f757f3fSDimitry Andric  }
112*5f757f3fSDimitry Andric  // [specialized.destroy], destroy
113*5f757f3fSDimitry Andric  using std::destroy;
114*5f757f3fSDimitry Andric  using std::destroy_at;
115*5f757f3fSDimitry Andric  using std::destroy_n;
116*5f757f3fSDimitry Andric
117*5f757f3fSDimitry Andric  namespace ranges {
118*5f757f3fSDimitry Andric    using std::ranges::destroy;
119*5f757f3fSDimitry Andric    using std::ranges::destroy_at;
120*5f757f3fSDimitry Andric    using std::ranges::destroy_n;
121*5f757f3fSDimitry Andric  } // namespace ranges
122*5f757f3fSDimitry Andric
123*5f757f3fSDimitry Andric  // [unique.ptr], class template unique_ptr
124*5f757f3fSDimitry Andric  using std::default_delete;
125*5f757f3fSDimitry Andric  using std::unique_ptr;
126*5f757f3fSDimitry Andric
127*5f757f3fSDimitry Andric  using std::make_unique;
128*5f757f3fSDimitry Andric  using std::make_unique_for_overwrite;
129*5f757f3fSDimitry Andric
130*5f757f3fSDimitry Andric  using std::operator<;
131*5f757f3fSDimitry Andric  using std::operator>;
132*5f757f3fSDimitry Andric  using std::operator<=;
133*5f757f3fSDimitry Andric  using std::operator>=;
134*5f757f3fSDimitry Andric  using std::operator<=>;
135*5f757f3fSDimitry Andric
136*5f757f3fSDimitry Andric  using std::operator<<;
137*5f757f3fSDimitry Andric
138*5f757f3fSDimitry Andric  // [util.smartptr.weak.bad], class bad_weak_ptr
139*5f757f3fSDimitry Andric  using std::bad_weak_ptr;
140*5f757f3fSDimitry Andric
141*5f757f3fSDimitry Andric  // [util.smartptr.shared], class template shared_ptr
142*5f757f3fSDimitry Andric  using std::shared_ptr;
143*5f757f3fSDimitry Andric
144*5f757f3fSDimitry Andric  // [util.smartptr.shared.create], shared_ptr creation
145*5f757f3fSDimitry Andric  using std::allocate_shared;
146*5f757f3fSDimitry Andric  using std::allocate_shared_for_overwrite;
147*5f757f3fSDimitry Andric  using std::make_shared;
148*5f757f3fSDimitry Andric  using std::make_shared_for_overwrite;
149*5f757f3fSDimitry Andric
150*5f757f3fSDimitry Andric  // [util.smartptr.shared.spec], shared_ptr specialized algorithms
151*5f757f3fSDimitry Andric  using std::swap;
152*5f757f3fSDimitry Andric
153*5f757f3fSDimitry Andric  // [util.smartptr.shared.cast], shared_ptr casts
154*5f757f3fSDimitry Andric  using std::const_pointer_cast;
155*5f757f3fSDimitry Andric  using std::dynamic_pointer_cast;
156*5f757f3fSDimitry Andric  using std::reinterpret_pointer_cast;
157*5f757f3fSDimitry Andric  using std::static_pointer_cast;
158*5f757f3fSDimitry Andric
159*5f757f3fSDimitry Andric  using std::get_deleter;
160*5f757f3fSDimitry Andric
161*5f757f3fSDimitry Andric  // [util.smartptr.shared.io], shared_ptr I/O
162*5f757f3fSDimitry Andric
163*5f757f3fSDimitry Andric  // [util.smartptr.weak], class template weak_ptr
164*5f757f3fSDimitry Andric  using std::weak_ptr;
165*5f757f3fSDimitry Andric
166*5f757f3fSDimitry Andric  // [util.smartptr.weak.spec], weak_ptr specialized algorithms
167*5f757f3fSDimitry Andric
168*5f757f3fSDimitry Andric  // [util.smartptr.ownerless], class template owner_less
169*5f757f3fSDimitry Andric  using std::owner_less;
170*5f757f3fSDimitry Andric
171*5f757f3fSDimitry Andric  // [util.smartptr.enab], class template enable_shared_from_this
172*5f757f3fSDimitry Andric  using std::enable_shared_from_this;
173*5f757f3fSDimitry Andric
174*5f757f3fSDimitry Andric  // [util.smartptr.hash], hash support
175*5f757f3fSDimitry Andric  using std::hash;
176*5f757f3fSDimitry Andric
177*5f757f3fSDimitry Andric  // [util.smartptr.atomic], atomic smart pointers
178*5f757f3fSDimitry Andric  // using std::atomic;
179*5f757f3fSDimitry Andric
180*5f757f3fSDimitry Andric  // [out.ptr.t], class template out_ptr_t
181*5f757f3fSDimitry Andric  //  using std::out_ptr_t;
182*5f757f3fSDimitry Andric
183*5f757f3fSDimitry Andric  // [out.ptr], function template out_ptr
184*5f757f3fSDimitry Andric  //  using std::out_ptr;
185*5f757f3fSDimitry Andric
186*5f757f3fSDimitry Andric  // [inout.ptr.t], class template inout_ptr_t
187*5f757f3fSDimitry Andric  //  using std::inout_ptr_t;
188*5f757f3fSDimitry Andric
189*5f757f3fSDimitry Andric  // [inout.ptr], function template inout_ptr
190*5f757f3fSDimitry Andric  //  using std::inout_ptr;
191*5f757f3fSDimitry Andric
192*5f757f3fSDimitry Andric#ifndef _LIBCPP_HAS_NO_THREADS
193*5f757f3fSDimitry Andric  // [depr.util.smartptr.shared.atomic]
194*5f757f3fSDimitry Andric  using std::atomic_is_lock_free;
195*5f757f3fSDimitry Andric
196*5f757f3fSDimitry Andric  using std::atomic_load;
197*5f757f3fSDimitry Andric  using std::atomic_load_explicit;
198*5f757f3fSDimitry Andric
199*5f757f3fSDimitry Andric  using std::atomic_store;
200*5f757f3fSDimitry Andric  using std::atomic_store_explicit;
201*5f757f3fSDimitry Andric
202*5f757f3fSDimitry Andric  using std::atomic_exchange;
203*5f757f3fSDimitry Andric  using std::atomic_exchange_explicit;
204*5f757f3fSDimitry Andric
205*5f757f3fSDimitry Andric  using std::atomic_compare_exchange_strong;
206*5f757f3fSDimitry Andric  using std::atomic_compare_exchange_strong_explicit;
207*5f757f3fSDimitry Andric  using std::atomic_compare_exchange_weak;
208*5f757f3fSDimitry Andric  using std::atomic_compare_exchange_weak_explicit;
209*5f757f3fSDimitry Andric#endif // _LIBCPP_HAS_NO_THREADS
210*5f757f3fSDimitry Andric} // namespace std
211