voidify

From cppreference.com
Utilities library
General utilities
Relational operators (deprecated in C++20)
Dynamic memory management
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Allocators
Garbage collection support
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)



template < class T >
constexpr void * voidify ( T & obj ) noexcept ;
(since C++20)
( exposition only* )

Returns the address of obj (implicitly converted to void * ).

Parameters

obj - the object whose address will be taken

Return value

std:: addressof ( obj )

Notes

This exposition-only function is introduced by P0896R4 . It is used to describe the effects of uninitialized memory algorithms which construct objects in uninitialized memory areas. The result pointer is used as the placement-params of a placement new expression .

Initially, the return value was const_cast < void * > ( static_cast < const volatile void * > ( std:: addressof ( obj ) ) ) , which breaks const-correctness. The explicit casts were removed by the resolution of LWG issue 3870 , and the only conversion left is the implicit conversion to void * .

Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior
LWG 3870 C++20 the explicit casts broke const-correctness removed these casts

See also

copies a range of objects to an uninitialized area of memory
(function template)
copies an object to an uninitialized area of memory, defined by a range
(function template)
moves a range of objects to an uninitialized area of memory
(function template)
constructs objects by default-initialization in an uninitialized area of memory, defined by a range
(function template)
constructs objects by value-initialization in an uninitialized area of memory, defined by a range
(function template)
creates an object at a given address
(function template)