15f757f3fSDimitry Andric// -*- C++ -*- 25f757f3fSDimitry Andric//===----------------------------------------------------------------------===// 35f757f3fSDimitry Andric// 45f757f3fSDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 55f757f3fSDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 65f757f3fSDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 75f757f3fSDimitry Andric// 85f757f3fSDimitry Andric//===----------------------------------------------------------------------===// 95f757f3fSDimitry Andric 105f757f3fSDimitry Andricexport namespace std { 115f757f3fSDimitry Andric // [pointer.traits], pointer traits 125f757f3fSDimitry Andric using std::pointer_traits; 135f757f3fSDimitry Andric 145f757f3fSDimitry Andric // [pointer.conversion], pointer conversion 155f757f3fSDimitry Andric using std::to_address; 165f757f3fSDimitry Andric 175f757f3fSDimitry Andric // [ptr.align], pointer alignment 185f757f3fSDimitry Andric using std::align; 195f757f3fSDimitry Andric using std::assume_aligned; 205f757f3fSDimitry Andric 215f757f3fSDimitry Andric // [obj.lifetime], explicit lifetime management 225f757f3fSDimitry Andric // using std::start_lifetime_as; 235f757f3fSDimitry Andric // using std::start_lifetime_as_array; 245f757f3fSDimitry Andric 255f757f3fSDimitry Andric // [allocator.tag], allocator argument tag 265f757f3fSDimitry Andric using std::allocator_arg; 275f757f3fSDimitry Andric using std::allocator_arg_t; 285f757f3fSDimitry Andric 295f757f3fSDimitry Andric // [allocator.uses], uses_allocator 305f757f3fSDimitry Andric using std::uses_allocator; 315f757f3fSDimitry Andric 325f757f3fSDimitry Andric // [allocator.uses.trait], uses_allocator 335f757f3fSDimitry Andric using std::uses_allocator_v; 345f757f3fSDimitry Andric 355f757f3fSDimitry Andric // [allocator.uses.construction], uses-allocator construction 365f757f3fSDimitry Andric using std::uses_allocator_construction_args; 375f757f3fSDimitry Andric 385f757f3fSDimitry Andric using std::make_obj_using_allocator; 395f757f3fSDimitry Andric using std::uninitialized_construct_using_allocator; 405f757f3fSDimitry Andric 415f757f3fSDimitry Andric // [allocator.traits], allocator traits 425f757f3fSDimitry Andric using std::allocator_traits; 435f757f3fSDimitry Andric 445f757f3fSDimitry Andric#if _LIBCPP_STD_VER >= 23 455f757f3fSDimitry Andric using std::allocation_result; 465f757f3fSDimitry Andric#endif 475f757f3fSDimitry Andric 485f757f3fSDimitry Andric // [default.allocator], the default allocator 495f757f3fSDimitry Andric using std::allocator; 505f757f3fSDimitry Andric using std::operator==; 515f757f3fSDimitry Andric 525f757f3fSDimitry Andric // [specialized.addressof], addressof 535f757f3fSDimitry Andric using std::addressof; 545f757f3fSDimitry Andric 555f757f3fSDimitry Andric // [specialized.algorithms], specialized algorithms 565f757f3fSDimitry Andric // [special.mem.concepts], special memory concepts 575f757f3fSDimitry Andric 585f757f3fSDimitry Andric using std::uninitialized_default_construct; 595f757f3fSDimitry Andric using std::uninitialized_default_construct_n; 605f757f3fSDimitry Andric 615f757f3fSDimitry Andric namespace ranges { 625f757f3fSDimitry Andric using std::ranges::uninitialized_default_construct; 635f757f3fSDimitry Andric using std::ranges::uninitialized_default_construct_n; 645f757f3fSDimitry Andric } // namespace ranges 655f757f3fSDimitry Andric 665f757f3fSDimitry Andric using std::uninitialized_value_construct; 675f757f3fSDimitry Andric using std::uninitialized_value_construct_n; 685f757f3fSDimitry Andric 695f757f3fSDimitry Andric namespace ranges { 705f757f3fSDimitry Andric using std::ranges::uninitialized_value_construct; 715f757f3fSDimitry Andric using std::ranges::uninitialized_value_construct_n; 725f757f3fSDimitry Andric } // namespace ranges 735f757f3fSDimitry Andric 745f757f3fSDimitry Andric using std::uninitialized_copy; 755f757f3fSDimitry Andric using std::uninitialized_copy_n; 765f757f3fSDimitry Andric 775f757f3fSDimitry Andric namespace ranges { 785f757f3fSDimitry Andric using std::ranges::uninitialized_copy; 795f757f3fSDimitry Andric using std::ranges::uninitialized_copy_result; 805f757f3fSDimitry Andric 815f757f3fSDimitry Andric using std::ranges::uninitialized_copy_n; 825f757f3fSDimitry Andric using std::ranges::uninitialized_copy_n_result; 835f757f3fSDimitry Andric } // namespace ranges 845f757f3fSDimitry Andric 855f757f3fSDimitry Andric using std::uninitialized_move; 865f757f3fSDimitry Andric using std::uninitialized_move_n; 875f757f3fSDimitry Andric 885f757f3fSDimitry Andric namespace ranges { 895f757f3fSDimitry Andric using std::ranges::uninitialized_move; 905f757f3fSDimitry Andric using std::ranges::uninitialized_move_result; 915f757f3fSDimitry Andric 925f757f3fSDimitry Andric using std::ranges::uninitialized_move_n; 935f757f3fSDimitry Andric using std::ranges::uninitialized_move_n_result; 945f757f3fSDimitry Andric } // namespace ranges 955f757f3fSDimitry Andric 965f757f3fSDimitry Andric using std::uninitialized_fill; 975f757f3fSDimitry Andric using std::uninitialized_fill_n; 985f757f3fSDimitry Andric 995f757f3fSDimitry Andric namespace ranges { 1005f757f3fSDimitry Andric using std::ranges::uninitialized_fill; 1015f757f3fSDimitry Andric using std::ranges::uninitialized_fill_n; 1025f757f3fSDimitry Andric } // namespace ranges 1035f757f3fSDimitry Andric 1045f757f3fSDimitry Andric // [specialized.construct], construct_at 1055f757f3fSDimitry Andric using std::construct_at; 1065f757f3fSDimitry Andric 1075f757f3fSDimitry Andric namespace ranges { 1085f757f3fSDimitry Andric using std::ranges::construct_at; 1095f757f3fSDimitry Andric } 1105f757f3fSDimitry Andric // [specialized.destroy], destroy 1115f757f3fSDimitry Andric using std::destroy; 1125f757f3fSDimitry Andric using std::destroy_at; 1135f757f3fSDimitry Andric using std::destroy_n; 1145f757f3fSDimitry Andric 1155f757f3fSDimitry Andric namespace ranges { 1165f757f3fSDimitry Andric using std::ranges::destroy; 1175f757f3fSDimitry Andric using std::ranges::destroy_at; 1185f757f3fSDimitry Andric using std::ranges::destroy_n; 1195f757f3fSDimitry Andric } // namespace ranges 1205f757f3fSDimitry Andric 1215f757f3fSDimitry Andric // [unique.ptr], class template unique_ptr 1225f757f3fSDimitry Andric using std::default_delete; 1235f757f3fSDimitry Andric using std::unique_ptr; 1245f757f3fSDimitry Andric 1255f757f3fSDimitry Andric using std::make_unique; 1265f757f3fSDimitry Andric using std::make_unique_for_overwrite; 1275f757f3fSDimitry Andric 1285f757f3fSDimitry Andric using std::operator<; 1295f757f3fSDimitry Andric using std::operator>; 1305f757f3fSDimitry Andric using std::operator<=; 1315f757f3fSDimitry Andric using std::operator>=; 1325f757f3fSDimitry Andric using std::operator<=>; 1335f757f3fSDimitry Andric 1345f757f3fSDimitry Andric using std::operator<<; 1355f757f3fSDimitry Andric 1365f757f3fSDimitry Andric // [util.smartptr.weak.bad], class bad_weak_ptr 1375f757f3fSDimitry Andric using std::bad_weak_ptr; 1385f757f3fSDimitry Andric 1395f757f3fSDimitry Andric // [util.smartptr.shared], class template shared_ptr 1405f757f3fSDimitry Andric using std::shared_ptr; 1415f757f3fSDimitry Andric 1425f757f3fSDimitry Andric // [util.smartptr.shared.create], shared_ptr creation 1435f757f3fSDimitry Andric using std::allocate_shared; 1445f757f3fSDimitry Andric using std::allocate_shared_for_overwrite; 1455f757f3fSDimitry Andric using std::make_shared; 1465f757f3fSDimitry Andric using std::make_shared_for_overwrite; 1475f757f3fSDimitry Andric 1485f757f3fSDimitry Andric // [util.smartptr.shared.spec], shared_ptr specialized algorithms 1495f757f3fSDimitry Andric using std::swap; 1505f757f3fSDimitry Andric 1515f757f3fSDimitry Andric // [util.smartptr.shared.cast], shared_ptr casts 1525f757f3fSDimitry Andric using std::const_pointer_cast; 1535f757f3fSDimitry Andric using std::dynamic_pointer_cast; 1545f757f3fSDimitry Andric using std::reinterpret_pointer_cast; 1555f757f3fSDimitry Andric using std::static_pointer_cast; 1565f757f3fSDimitry Andric 1577a6dacacSDimitry Andric#ifndef _LIBCPP_HAS_NO_RTTI 1585f757f3fSDimitry Andric using std::get_deleter; 1597a6dacacSDimitry Andric#endif // _LIBCPP_HAS_NO_RTTI 1605f757f3fSDimitry Andric 1615f757f3fSDimitry Andric // [util.smartptr.shared.io], shared_ptr I/O 1625f757f3fSDimitry Andric 1635f757f3fSDimitry Andric // [util.smartptr.weak], class template weak_ptr 1645f757f3fSDimitry Andric using std::weak_ptr; 1655f757f3fSDimitry Andric 1665f757f3fSDimitry Andric // [util.smartptr.weak.spec], weak_ptr specialized algorithms 1675f757f3fSDimitry Andric 1685f757f3fSDimitry Andric // [util.smartptr.ownerless], class template owner_less 1695f757f3fSDimitry Andric using std::owner_less; 1705f757f3fSDimitry Andric 1715f757f3fSDimitry Andric // [util.smartptr.enab], class template enable_shared_from_this 1725f757f3fSDimitry Andric using std::enable_shared_from_this; 1735f757f3fSDimitry Andric 1745f757f3fSDimitry Andric // [util.smartptr.hash], hash support 1755f757f3fSDimitry Andric using std::hash; 1765f757f3fSDimitry Andric 1775f757f3fSDimitry Andric // [util.smartptr.atomic], atomic smart pointers 1785f757f3fSDimitry Andric // using std::atomic; 1795f757f3fSDimitry Andric 180*0fca6ea1SDimitry Andric#if _LIBCPP_STD_VER >= 23 1815f757f3fSDimitry Andric // [out.ptr.t], class template out_ptr_t 182*0fca6ea1SDimitry Andric using std::out_ptr_t; 1835f757f3fSDimitry Andric 1845f757f3fSDimitry Andric // [out.ptr], function template out_ptr 185*0fca6ea1SDimitry Andric using std::out_ptr; 1865f757f3fSDimitry Andric 1875f757f3fSDimitry Andric // [inout.ptr.t], class template inout_ptr_t 188*0fca6ea1SDimitry Andric using std::inout_ptr_t; 1895f757f3fSDimitry Andric 1905f757f3fSDimitry Andric // [inout.ptr], function template inout_ptr 191*0fca6ea1SDimitry Andric using std::inout_ptr; 192*0fca6ea1SDimitry Andric#endif // _LIBCPP_STD_VER >= 23 1935f757f3fSDimitry Andric 1945f757f3fSDimitry Andric#ifndef _LIBCPP_HAS_NO_THREADS 1955f757f3fSDimitry Andric // [depr.util.smartptr.shared.atomic] 1965f757f3fSDimitry Andric using std::atomic_is_lock_free; 1975f757f3fSDimitry Andric 1985f757f3fSDimitry Andric using std::atomic_load; 1995f757f3fSDimitry Andric using std::atomic_load_explicit; 2005f757f3fSDimitry Andric 2015f757f3fSDimitry Andric using std::atomic_store; 2025f757f3fSDimitry Andric using std::atomic_store_explicit; 2035f757f3fSDimitry Andric 2045f757f3fSDimitry Andric using std::atomic_exchange; 2055f757f3fSDimitry Andric using std::atomic_exchange_explicit; 2065f757f3fSDimitry Andric 2075f757f3fSDimitry Andric using std::atomic_compare_exchange_strong; 2085f757f3fSDimitry Andric using std::atomic_compare_exchange_strong_explicit; 2095f757f3fSDimitry Andric using std::atomic_compare_exchange_weak; 2105f757f3fSDimitry Andric using std::atomic_compare_exchange_weak_explicit; 2115f757f3fSDimitry Andric#endif // _LIBCPP_HAS_NO_THREADS 2125f757f3fSDimitry Andric} // namespace std 213