std::out_ptr_t<Smart,Pointer,Args...>::operator Pointer*, std::out_ptr_t<Smart,Pointer,Args...>::
From cppreference.com
C++
Memory management library
|
|
|
std::out_ptr_t
Member functions | ||||
out_ptr_t::operator Pointer*out_ptr_t::operator void** | ||||
Non-member functions | ||||
operator Pointer*() const noexcept;
|
(1) | (since C++23) |
operator void
**
(
)
const
noexcept
;
|
(2) | (since C++23) |
Exposes the address of a Pointer
or void*
1) Converts *this to the address of stored
Pointer
object.
2) Converts *this to the address of a void* object. This conversion function participates in overload resolution only if
The initial value of the void* object is equal the value of the stored
Pointer
is not same as void*, and the program is ill-formed if Pointer
is not a pointer type.The initial value of the void* object is equal the value of the stored
Pointer
object converted to void*, and any modification to it affects the Pointer
value used in the destructor. Accessing the void* object outside the lifetime of *this
Once one of these two conversion functions has been called on an out_ptr_t
object, the other shall not be called on it, otherwise, the behavior is undefined.
Parameters
(none)
Return value
1) The address of stored
Pointer
object.
2) The address of the void*
Notes
If the object pointed by the return value has not been rewritten, it is equal to nullptr.
On common implementations, the object representation of every Pointer
that is a pointer type is compatible with that of void*, and therefore these implementations typically store the void* object within the storage for the Pointer
- If the implementation enables type-based alias analysis (which relies on the strict aliasing rule), a properly aligned std::byte [sizeof( void * ) ] member subobject may be used, and both conversion functions return the address of objects implicitly created
- Otherwise, a
Pointer
member subobject may be used for both conversion functions, and (2) may directly returns its address reinterpret_cast to void**
If Pointer
is a pointer type whose object representation is incompatible with that of void*, an additional bool flag may be needed for recording whether (1) (or (2)
Example
This section is incomplete Reason: no example |