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