Boost C++ Libraries of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

This is the documentation for an old version of Boost. Click here to view this page for the latest version.


Header <boost/core/addressof.hpp>


  • Brad King
  • Douglas Gregor
  • Peter Dimov
  • Glen Fernandes

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.