在"if"语句中创建COM智能指针时出错C2275

fog*_*bit 5 c++ com smart-pointers

为什么我不能

if (IUnknownPtr p = anotherComPtr) {} //error C2275: 'IUnknownPtr' : illegal use of this type as an expression
Run Code Online (Sandbox Code Playgroud)

虽然我可以

if (int* a = anotherPointer) {}
Run Code Online (Sandbox Code Playgroud)

IUnknownPtr是通过定义_COM_SMARTPTR_TYPEDEF(IUnknown, __uuidof(IUnknown))(像我使用的任何其他智能指针)

如何在if语句中创建com smartptr 并验证它是否有效?谢谢.

我使用VS 2008

ps这不是关于编码的好方法,而是关于error C2275.

Ste*_*fan 0

我模糊地记得有关 MSDEV 在 if 语句内声明变量时不遵循 C++ 规范的一些事情(或者它可能是一个 for 循环?)。

它应该在括号末尾被破坏,但事实并非如此。

这可能是一种回溯——您是否尝试过梳理 MSDN 档案?这看起来更像是一种怪癖,而不是故意行为,除非(正如另一位发帖者评论的那样)你误解了正在发生的事情。

您可以发布实际的代码以及周围的功能吗?