std::out_ptr_t<Smart,Pointer,Args...>:: operator Pointer*, std::out_ptr_t<Smart,Pointer,Args...>:: operator void**
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 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
*
object to a foreign function which will generally re-initialize it.
Pointer
object.
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
has undefined behavior.
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.
Contents |
Parameters
(none)
Return value
Pointer
object.
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
object, no additional storage needed:
- 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 within the array.
-
Otherwise, a
Pointermember 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)
) has been called.
Example
|
This section is incomplete
Reason: no example |