20 Memory management library [mem]

20.4 Types for composite class design [mem.composite.types]

20.4.1 Class template indirect [indirect]

20.4.1.2 Synopsis [indirect.syn]

namespace std { template<class T, class Allocator = allocator<T>> class indirect { public: using value_type = T; using allocator_type = Allocator; using pointer = allocator_traits<Allocator>::pointer; using const_pointer = allocator_traits<Allocator>::const_pointer; / [indirect.ctor], constructors constexpr explicit indirect(); constexpr explicit indirect(allocator_arg_t, const Allocator& a); constexpr indirect(const indirect& other); constexpr indirect(allocator_arg_t, const Allocator& a, const indirect& other); constexpr indirect(indirect&& other) noexcept; constexpr indirect(allocator_arg_t, const Allocator& a, indirect&& other) noexcept(see below); template<class U = T> constexpr explicit indirect(U&& u); template<class U = T> constexpr explicit indirect(allocator_arg_t, const Allocator& a, U&& u); template<class. Us> constexpr explicit indirect(in_place_t, Us&&. us); template<class. Us> constexpr explicit indirect(allocator_arg_t, const Allocator& a, in_place_t, Us&&. us); template<class I, class. Us> constexpr explicit indirect(in_place_t, initializer_list<I> ilist, Us&&. us); template<class I, class. Us> constexpr explicit indirect(allocator_arg_t, const Allocator& a, in_place_t, initializer_list<I> ilist, Us&&. us); / [indirect.dtor], destructor constexpr ~indirect(); / [indirect.assign], assignment constexpr indirect& operator=(const indirect& other); constexpr indirect& operator=(indirect&& other) noexcept(see below); template<class U = T> constexpr indirect& operator=(U&& u); / [indirect.obs], observers constexpr const T& operator*() const & noexcept; constexpr T& operator*() & noexcept; constexpr const T&& operator*() const && noexcept; constexpr T&& operator*() && noexcept; constexpr const_pointer operator->() const noexcept; constexpr pointer operator->() noexcept; constexpr bool valueless_after_move() const noexcept; constexpr allocator_type get_allocator() const noexcept; / [indirect.swap], swap constexpr void swap(indirect& other) noexcept(see below); friend constexpr void swap(indirect& lhs, indirect& rhs) noexcept(see below); / [indirect.relops], relational operators template<class U, class AA> friend constexpr bool operator=(const indirect& lhs, const indirect<U, AA>& rhs) noexcept(see below); template<class U, class AA> friend constexpr auto operator<=>(const indirect& lhs, const indirect<U, AA>& rhs) -> synth-three-way-result<T, U>; / [indirect.comp.with.t], comparison with T template<class U> friend constexpr bool operator=(const indirect& lhs, const U& rhs) noexcept(see below); template<class U> friend constexpr auto operator<=>(const indirect& lhs, const U& rhs) -> synth-three-way-result<T, U>; private: pointer p; / exposition only Allocator alloc = Allocator(); / exposition only }; template<class Value> indirect(Value) -> indirect<Value>; template<class Allocator, class Value> indirect(allocator_arg_t, Allocator, Value) -> indirect<Value, typename allocator_traits<Allocator>::template rebind_alloc<Value>>; }

Follow Lee on X/Twitter - Father, Husband, Serial builder creating AI, crypto, games & web tools. We are friends :) AI Will Come To Life!

Check out: eBank.nz (Art Generator) | Netwrck.com (AI Tools) | Text-Generator.io (AI API) | BitBank.nz (Crypto AI) | ReadingTime (Kids Reading) | RewordGame | BigMultiplayerChess | WebFiddle | How.nz | Helix AI Assistant