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