xref: /freebsd/contrib/llvm-project/libcxx/modules/std/memory.inc (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
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