More C++ Idioms/Address Of

= Address Of =

Intent
Find the address of an object of a class that has an overloaded unary ampersand (&) operator.

Also Known As
This idiom has no known alias.

Motivation
C++ allows overloading of the unary ampersand (&) operator for class types. The return type of such an operator need not be the actual address of the object. Intentions of such a class are highly debatable, but the language allows it nevertheless. The address-of idiom is a way to find the real address of an object irrespective of the overloaded unary ampersand operator and its access protection.

In the example below, the  function fails to compile because the   of the class   is private. Even if it were accessible, a conversion from its return type  to a pointer would not have been possible or meaningful.

Solution and Sample Code
The Address-of idiom retrieves the address of an object using a series of casts.

C++11
In C++11 the template, in the   header, was added to solve this problem. Since C++17 the template is also marked.

Known Uses

 * Boost's  utility.