...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
The header <boost/core/addressof.hpp>
defines the function template boost::addressof
.
boost::addressof(x)
returns
the address of x
. Ordinarily,
this address can be obtained by &x
, but the unary &
operator can be overloaded. boost::addressof
avoids calling used-defined operator&()
.
boost::addressof
was originally contributed by
Brad King based on ideas from discussion with Doug Gregor.
namespace boost { template<class T> T* addressof( T& x ); }
#include <boost/core/addressof.hpp> struct useless_type { }; class nonaddressable { useless_type operator&() const; }; void f() { nonaddressable x; nonaddressable* xp = boost::addressof(x); // nonaddressable* xpe = &x; /* error */ }
In C++11 and above, boost::addressof
is conditionally constexpr
when possible. This is indicated by BOOST_CORE_NO_CONSTEXPR_ADDRESSOF
not being defined.
With supported compilers, boost::addressof
is always constexpr
by leveraging
compiler intrinsics. This is indicated by BOOST_CORE_HAS_BUILTIN_ADDRESSOF
being defined.