std::addressof (3) - Linux Manuals
std::addressof: std::addressof
NAME
std::addressof - std::addressof
Synopsis
Defined in header <memory>
template< class T > (since C++11)
T* addressof(T& arg) noexcept; (until C++17)
template< class T > (1) (since C++17)
constexpr T* addressof(T& arg) noexcept;
template <class T> (2) (since C++17)
const T* addressof(const T&&) = delete;
1) Obtains the actual address of the object or function arg, even in presence of overloaded operator&
2) Rvalue overload is deleted to prevent taking the address of const rvalues.
The expression std::addressof(E) is a constant_subexpression, if E is an lvalue constant subexpression. (since C++17)
Parameters
arg - lvalue object or function
Return value
Pointer to arg.
Possible implementation
Note: the above implementation is_oversimplified and is not constexpr (which requires compiler support).
Example
operator& may be overloaded for a pointer wrapper class to obtain a pointer to pointer:
// Run this code
Possible output:
See also
allocator (class template)
pointer_to obtains a dereferenceable pointer to its argument
[static]