Daily bit(e) C++ #179, Утилита C++11 std::addressof для получения фактического адреса объекта.

Утилита C++11 std::addressof решает очень простую проблему.

Как получить фактический адрес объекта, если встроенный оператор адреса может быть перегружен?

#include <memory>
#include <cassert>

struct X {
    X* operator&() {
        return nullptr;
    }
};


X x;

// overload for operator& always returns nullptr
assert(&x == nullptr);

// actual address of the object
assert(std::addressof(x) != nullptr);

Откройте пример в Compiler Explorer.