Ответ 1
Я видел, что этот случай появился на собрании ISO, поскольку он нарушил реализацию макросов offsetof() (LWG 273). Решение: &reinterpret_cast<unsigned char&>(variable)
_ com_ptr_ имеет перегруженный оператор &() с побочным эффектом. Если у меня есть переменная:
_com_ptr_t<Interface> variable;
Как я могу получить свой адрес (_com_ptr_t <Interface> * указатель) без вызова перегруженного оператора и запускающего побочный эффект?
Я видел, что этот случай появился на собрании ISO, поскольку он нарушил реализацию макросов offsetof() (LWG 273). Решение: &reinterpret_cast<unsigned char&>(variable)
Я определяю эту служебную функцию:
template<typename T>
T *GetRealAddr(T &t)
{ return reinterpret_cast<T*>(&reinterpret_cast<unsigned char &>(t)); }
& variable.GetInterfacePtr();