Если оператор перегружен для класса С++, как я могу использовать оператор по умолчанию?

_ com_ptr_ имеет перегруженный оператор &() с побочным эффектом. Если у меня есть переменная:

_com_ptr_t<Interface> variable;

Как я могу получить свой адрес (_com_ptr_t <Interface> * указатель) без вызова перегруженного оператора и запускающего побочный эффект?

Ответ 1

Я видел, что этот случай появился на собрании ISO, поскольку он нарушил реализацию макросов offsetof() (LWG 273). Решение: &reinterpret_cast<unsigned char&>(variable)

Ответ 2

Я определяю эту служебную функцию:

template<typename T>
T *GetRealAddr(T &t)
    { return reinterpret_cast<T*>(&reinterpret_cast<unsigned char &>(t)); }

Ответ 3

& variable.GetInterfacePtr();