# std::inout_ptr

From cppreference.com
< cpp‎ | memory‎ | inout ptr t

Defined in header `<memory>` |  |
template< class Pointer = void, class Smart, class... Args > auto inout_ptr( Smart& s, Args&&... args ); |  | (since C++23)

Returns an `inout_ptr_t` with deduced template arguments that captures arguments for resetting by reference.

The program is ill-formed if construction of the return value (see below) is ill-formed.

### Parameters

s | - | the object (typically a smart pointer) to adapt
args... | - | the arguments for resetting to capture

### Return value

std::inout_ptr_t<Smart, P, Args&&>(s, std::forward<Args>(args)...), where `P` is

- `Pointer`, if `Pointer` is not same as void, otherwise,
- Smart::pointer, if it is valid and denotes a type, otherwise,
- Smart::element_type*, if Smart::element_type is valid and denotes a type, otherwise,
- std::pointer_traits<Smart>::element_type*.

### Notes

Users may specify the template argument for the template parameter `Pointer`, in order to interoperate with foreign functions that take a Pointer*.

As all arguments for resetting are captured by reference, the returned `inout_ptr_t` should be a temporary object destroyed at the end of the full-expression containing the call to the foreign function, in order to avoid dangling references.

Feature-test macro | Value | Std | Comment
--- | --- | --- | ---
`__cpp_lib_out_ptr` | 202106L | (C++23) | std::out_ptr, `std::inout_ptr`

### Example

| This section is incomplete Reason: no example

### See also

out_ptr (C++23) | creates an `out_ptr_t` with an associated smart pointer and resetting arguments (function template)
make_unique make_unique_for_overwrite (C++14)(C++20) | creates a unique pointer that manages a new object (function template)
make_shared make_shared_for_overwrite (C++20) | creates a shared pointer that manages a new object (function template)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/memory/inout_ptr_t/inout_ptr&oldid=151351"