_com_ptr_ has an overloaded operator&() with a side effect. If I have a variable:
_com_ptr_t<Interface> variable;
How could I retrieve its address (_com_ptr_t<Interface>* pointer) without calling the overloaded operator and triggering the side effect?
I define this utility function:
&variable.GetInterfacePtr();
I've seen this case pop up in an ISO meeting as it broke some offsetof() macro implementations (LWG 273). The solution:
&reinterpret_cast<unsigned char&>(variable)