При переносе проекта с VC2003 на VC2008 перестала компилироваться конструкция std::list<IUnknownPtr>:
error C2664: 'std::allocator<_Ty>::construct' : cannot convert parameter 1 from 'IUnknown **' to '_com_ptr_t<_IIID> *'
Причина возникновения ошибки понятна — перегруженный оператор operator& у _com_ptr_t.
Проблема решена заменой list на vector, но хотелось бы узнать сталкивался ли кто-нибудь еще с этой проблемой и есть ли у нее другие решения?
Здравствуйте, _Paul, Вы писали:
_P>При переносе проекта с VC2003 на VC2008 перестала компилироваться конструкция std::list<IUnknownPtr>:
_P>error C2664: 'std::allocator<_Ty>::construct' : cannot convert parameter 1 from 'IUnknown **' to '_com_ptr_t<_IIID> *'
_P>Причина возникновения ошибки понятна — перегруженный оператор operator& у _com_ptr_t.
_P>Проблема решена заменой list на vector, но хотелось бы узнать сталкивался ли кто-нибудь еще с этой проблемой и есть ли у нее другие решения?
Есть класс
ATL::CAdapt.
Typically, you will use CAdapt when you want to store CComBSTR, CComPtr, CComQIPtr, or _com_ptr_t objects in an STL container such as a list. You can't store objects of these types like this:
std::list< CComBSTR > m_List;
Instead, you should store adapter objects like this:
std::list< CAdapt< CComBSTR > > m_List;