xref: /freebsd/contrib/llvm-project/libcxx/modules/std/memory.inc (revision 7a6dacaca14b62ca4b74406814becb87a3fefac0)
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
475f757f3fSDimitry Andric  using std::allocate_at_least;
485f757f3fSDimitry Andric#endif
495f757f3fSDimitry Andric
505f757f3fSDimitry Andric  // [default.allocator], the default allocator
515f757f3fSDimitry Andric  using std::allocator;
525f757f3fSDimitry Andric  using std::operator==;
535f757f3fSDimitry Andric
545f757f3fSDimitry Andric  // [specialized.addressof], addressof
555f757f3fSDimitry Andric  using std::addressof;
565f757f3fSDimitry Andric
575f757f3fSDimitry Andric  // [specialized.algorithms], specialized algorithms
585f757f3fSDimitry Andric  // [special.mem.concepts], special memory concepts
595f757f3fSDimitry Andric
605f757f3fSDimitry Andric  using std::uninitialized_default_construct;
615f757f3fSDimitry Andric  using std::uninitialized_default_construct_n;
625f757f3fSDimitry Andric
635f757f3fSDimitry Andric  namespace ranges {
645f757f3fSDimitry Andric    using std::ranges::uninitialized_default_construct;
655f757f3fSDimitry Andric    using std::ranges::uninitialized_default_construct_n;
665f757f3fSDimitry Andric  } // namespace ranges
675f757f3fSDimitry Andric
685f757f3fSDimitry Andric  using std::uninitialized_value_construct;
695f757f3fSDimitry Andric  using std::uninitialized_value_construct_n;
705f757f3fSDimitry Andric
715f757f3fSDimitry Andric  namespace ranges {
725f757f3fSDimitry Andric    using std::ranges::uninitialized_value_construct;
735f757f3fSDimitry Andric    using std::ranges::uninitialized_value_construct_n;
745f757f3fSDimitry Andric  } // namespace ranges
755f757f3fSDimitry Andric
765f757f3fSDimitry Andric  using std::uninitialized_copy;
775f757f3fSDimitry Andric  using std::uninitialized_copy_n;
785f757f3fSDimitry Andric
795f757f3fSDimitry Andric  namespace ranges {
805f757f3fSDimitry Andric    using std::ranges::uninitialized_copy;
815f757f3fSDimitry Andric    using std::ranges::uninitialized_copy_result;
825f757f3fSDimitry Andric
835f757f3fSDimitry Andric    using std::ranges::uninitialized_copy_n;
845f757f3fSDimitry Andric    using std::ranges::uninitialized_copy_n_result;
855f757f3fSDimitry Andric  } // namespace ranges
865f757f3fSDimitry Andric
875f757f3fSDimitry Andric  using std::uninitialized_move;
885f757f3fSDimitry Andric  using std::uninitialized_move_n;
895f757f3fSDimitry Andric
905f757f3fSDimitry Andric  namespace ranges {
915f757f3fSDimitry Andric    using std::ranges::uninitialized_move;
925f757f3fSDimitry Andric    using std::ranges::uninitialized_move_result;
935f757f3fSDimitry Andric
945f757f3fSDimitry Andric    using std::ranges::uninitialized_move_n;
955f757f3fSDimitry Andric    using std::ranges::uninitialized_move_n_result;
965f757f3fSDimitry Andric  } // namespace ranges
975f757f3fSDimitry Andric
985f757f3fSDimitry Andric  using std::uninitialized_fill;
995f757f3fSDimitry Andric  using std::uninitialized_fill_n;
1005f757f3fSDimitry Andric
1015f757f3fSDimitry Andric  namespace ranges {
1025f757f3fSDimitry Andric    using std::ranges::uninitialized_fill;
1035f757f3fSDimitry Andric    using std::ranges::uninitialized_fill_n;
1045f757f3fSDimitry Andric  } // namespace ranges
1055f757f3fSDimitry Andric
1065f757f3fSDimitry Andric  // [specialized.construct], construct_at
1075f757f3fSDimitry Andric  using std::construct_at;
1085f757f3fSDimitry Andric
1095f757f3fSDimitry Andric  namespace ranges {
1105f757f3fSDimitry Andric    using std::ranges::construct_at;
1115f757f3fSDimitry Andric  }
1125f757f3fSDimitry Andric  // [specialized.destroy], destroy
1135f757f3fSDimitry Andric  using std::destroy;
1145f757f3fSDimitry Andric  using std::destroy_at;
1155f757f3fSDimitry Andric  using std::destroy_n;
1165f757f3fSDimitry Andric
1175f757f3fSDimitry Andric  namespace ranges {
1185f757f3fSDimitry Andric    using std::ranges::destroy;
1195f757f3fSDimitry Andric    using std::ranges::destroy_at;
1205f757f3fSDimitry Andric    using std::ranges::destroy_n;
1215f757f3fSDimitry Andric  } // namespace ranges
1225f757f3fSDimitry Andric
1235f757f3fSDimitry Andric  // [unique.ptr], class template unique_ptr
1245f757f3fSDimitry Andric  using std::default_delete;
1255f757f3fSDimitry Andric  using std::unique_ptr;
1265f757f3fSDimitry Andric
1275f757f3fSDimitry Andric  using std::make_unique;
1285f757f3fSDimitry Andric  using std::make_unique_for_overwrite;
1295f757f3fSDimitry Andric
1305f757f3fSDimitry Andric  using std::operator<;
1315f757f3fSDimitry Andric  using std::operator>;
1325f757f3fSDimitry Andric  using std::operator<=;
1335f757f3fSDimitry Andric  using std::operator>=;
1345f757f3fSDimitry Andric  using std::operator<=>;
1355f757f3fSDimitry Andric
1365f757f3fSDimitry Andric  using std::operator<<;
1375f757f3fSDimitry Andric
1385f757f3fSDimitry Andric  // [util.smartptr.weak.bad], class bad_weak_ptr
1395f757f3fSDimitry Andric  using std::bad_weak_ptr;
1405f757f3fSDimitry Andric
1415f757f3fSDimitry Andric  // [util.smartptr.shared], class template shared_ptr
1425f757f3fSDimitry Andric  using std::shared_ptr;
1435f757f3fSDimitry Andric
1445f757f3fSDimitry Andric  // [util.smartptr.shared.create], shared_ptr creation
1455f757f3fSDimitry Andric  using std::allocate_shared;
1465f757f3fSDimitry Andric  using std::allocate_shared_for_overwrite;
1475f757f3fSDimitry Andric  using std::make_shared;
1485f757f3fSDimitry Andric  using std::make_shared_for_overwrite;
1495f757f3fSDimitry Andric
1505f757f3fSDimitry Andric  // [util.smartptr.shared.spec], shared_ptr specialized algorithms
1515f757f3fSDimitry Andric  using std::swap;
1525f757f3fSDimitry Andric
1535f757f3fSDimitry Andric  // [util.smartptr.shared.cast], shared_ptr casts
1545f757f3fSDimitry Andric  using std::const_pointer_cast;
1555f757f3fSDimitry Andric  using std::dynamic_pointer_cast;
1565f757f3fSDimitry Andric  using std::reinterpret_pointer_cast;
1575f757f3fSDimitry Andric  using std::static_pointer_cast;
1585f757f3fSDimitry Andric
159*7a6dacacSDimitry Andric#ifndef _LIBCPP_HAS_NO_RTTI
1605f757f3fSDimitry Andric  using std::get_deleter;
161*7a6dacacSDimitry Andric#endif // _LIBCPP_HAS_NO_RTTI
1625f757f3fSDimitry Andric
1635f757f3fSDimitry Andric  // [util.smartptr.shared.io], shared_ptr I/O
1645f757f3fSDimitry Andric
1655f757f3fSDimitry Andric  // [util.smartptr.weak], class template weak_ptr
1665f757f3fSDimitry Andric  using std::weak_ptr;
1675f757f3fSDimitry Andric
1685f757f3fSDimitry Andric  // [util.smartptr.weak.spec], weak_ptr specialized algorithms
1695f757f3fSDimitry Andric
1705f757f3fSDimitry Andric  // [util.smartptr.ownerless], class template owner_less
1715f757f3fSDimitry Andric  using std::owner_less;
1725f757f3fSDimitry Andric
1735f757f3fSDimitry Andric  // [util.smartptr.enab], class template enable_shared_from_this
1745f757f3fSDimitry Andric  using std::enable_shared_from_this;
1755f757f3fSDimitry Andric
1765f757f3fSDimitry Andric  // [util.smartptr.hash], hash support
1775f757f3fSDimitry Andric  using std::hash;
1785f757f3fSDimitry Andric
1795f757f3fSDimitry Andric  // [util.smartptr.atomic], atomic smart pointers
1805f757f3fSDimitry Andric  // using std::atomic;
1815f757f3fSDimitry Andric
1825f757f3fSDimitry Andric  // [out.ptr.t], class template out_ptr_t
1835f757f3fSDimitry Andric  //  using std::out_ptr_t;
1845f757f3fSDimitry Andric
1855f757f3fSDimitry Andric  // [out.ptr], function template out_ptr
1865f757f3fSDimitry Andric  //  using std::out_ptr;
1875f757f3fSDimitry Andric
1885f757f3fSDimitry Andric  // [inout.ptr.t], class template inout_ptr_t
1895f757f3fSDimitry Andric  //  using std::inout_ptr_t;
1905f757f3fSDimitry Andric
1915f757f3fSDimitry Andric  // [inout.ptr], function template inout_ptr
1925f757f3fSDimitry Andric  //  using std::inout_ptr;
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