C++ lambda—;内部未调用显式运算符bool;MSVC漏洞? #包括 结构T{ 显式运算符bool(){return true;} }; int main(){ T; 如果(t){}//OK 自动l=[&](){ if(t){}//错误 }; }

C++ lambda—;内部未调用显式运算符bool;MSVC漏洞? #包括 结构T{ 显式运算符bool(){return true;} }; int main(){ T; 如果(t){}//OK 自动l=[&](){ if(t){}//错误 }; },c++,visual-c++,lambda,C++,Visual C++,Lambda,MSVC的行为在这里似乎奇怪地不一致;OK行和Error行之间的唯一区别是其中一行位于lambda中。这是虫子吗 这是虫子吗 是的,当然。您的程序中没有任何错误,在这两种情况下都应调用bool转换运算符。请提供错误消息的全文?还有,什么编译器版本、平台和版本?编译器来自Visual Studio 2012 Express,具有11月的CTP升级,并标识为Microsoft(R)针对x86的C/C++优化编译器版本17.00.51025并给出了错误C2451:类型为“T”的条件表达式是非法的没有用

MSVC的行为在这里似乎奇怪地不一致;OK行和Error行之间的唯一区别是其中一行位于lambda中。这是虫子吗

这是虫子吗


是的,当然。您的程序中没有任何错误,在这两种情况下都应调用
bool
转换运算符。

请提供错误消息的全文?还有,什么编译器版本、平台和版本?编译器来自Visual Studio 2012 Express,具有11月的CTP升级,并标识为
Microsoft(R)针对x86的C/C++优化编译器版本17.00.51025
并给出了
错误C2451:类型为“T”的条件表达式是非法的没有用户定义的转换运算符可以执行此转换,或者无法调用该运算符
感谢您提供了该运算符。我
也喜欢
此错误…)
#include <functional>

struct T {
    explicit operator bool() { return true; }
};

int main() {
    T t;

    if(t) {} // OK

    auto l = [&]() {
        if (t) {} // Error
    };
}