Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 显式std::异常\u ptr到bool的转换不存在。。。VS2010漏洞?_C++_Visual Studio 2010_Exception - Fatal编程技术网

C++ 显式std::异常\u ptr到bool的转换不存在。。。VS2010漏洞?

C++ 显式std::异常\u ptr到bool的转换不存在。。。VS2010漏洞?,c++,visual-studio-2010,exception,C++,Visual Studio 2010,Exception,安装VS2010+SP1以构建自制OpenCV 3.4。核心模块async.cpp(112)中出现错误: has_异常为bool,异常为std::exception_ptr。错误:C2677 根据()中的示例进行简单测试: #包括“stdafx.h” #包括 int _tmain(int argc,_TCHAR*argv[]{ std::异常_ptrp; boolb1,b2; b1=(bool)p; b2=静态压力(p); 返回0; } 两个强制转换都无法使用C2440进行调试。 基于docs

安装VS2010+SP1以构建自制OpenCV 3.4。核心模块async.cpp(112)中出现错误:

has_异常为bool,异常为std::exception_ptr。错误:C2677

根据()中的示例进行简单测试:

#包括“stdafx.h”
#包括
int _tmain(int argc,_TCHAR*argv[]{
std::异常_ptrp;
boolb1,b2;
b1=(bool)p;
b2=静态压力(p);
返回0;
}
两个强制转换都无法使用C2440进行调试。 基于docs()的异常ptr应该是“上下文可转换”的,并且可以显式转换。 我想这与我的环境有关,但我不知道如何纠正它

如前所述,
std::exception_ptr
确实应该在上下文中转换为
bool
。如果它不能与编译器一起工作,那么这是一个编译器缺陷。尽管VS2010相当陈旧,不太可能修复

您可以通过将指针与默认构造的
std::exception_ptr
进行比较来解决此问题,默认构造的指针为空指针:

if (ptr != std::exception_ptr()) {
    // ptr is not null
}
如前所述,
std::exception_ptr
确实应该在上下文中转换为
bool
。如果它不能与编译器一起工作,那么这是一个编译器缺陷。尽管VS2010相当陈旧,不太可能修复

您可以通过将指针与默认构造的
std::exception_ptr
进行比较来解决此问题,默认构造的指针为空指针:

if (ptr != std::exception_ptr()) {
    // ptr is not null
}

你能提供一个完整的错误信息吗?按规则要求编辑代码片段。Saldy编译错误是俄语,所以我只能手工编译“完整错误消息”:错误C2440:无法从“std::exception_ptr”转换为“bool”。请注意,MSVS2010是在C++11标准化之前发布的,对C++11的支持非常有限。您至少需要MSVS2015更新3才能完全符合C++11。也就是说,MSVS2019是免费提供的,如果你要升级,你应该使用它,因为你可以访问C++14和C++17功能。你能提供一个完整的错误消息和完整的错误消息吗?按规则要求编辑代码片段。Saldy编译错误是俄语,所以我只能手工编译“完整错误消息”:错误C2440:无法从“std::exception_ptr”转换为“bool”。请注意,MSVS2010是在C++11标准化之前发布的,对C++11的支持非常有限。您至少需要MSVS2015更新3才能完全符合C++11。也就是说,MSVS2019是免费的,如果你要升级,你应该使用它,因为你可以访问C++14和C++17功能。这一点很好。VS2010明显地超过了2011 C++标准,所以你不能指望它符合它。VS2010具有C++ 11的一些特性,但是它们不完整。如果他们采用了“全有或全无”的方法,那就太好了,但他们创建了异常类型,但没有声明或实现操作符bool()。我和一些同事一起检查了这个例子(只是想看看我的vs安装是否完好无损),v100平台的每个变体都有相同的结果。这一点很好。VS2010明显地超过了2011 C++标准,所以你不能指望它符合它。VS2010具有C++ 11的一些特性,但是它们不完整。如果他们采用了“全有或全无”的方法,那就太好了,但他们创建了异常类型,但没有声明或实现操作符bool()。我和一些同事一起检查了这个例子(只是想看看我的vs安装是否完好无损),v100平台的每个变体都有相同的结果。
if (ptr != std::exception_ptr()) {
    // ptr is not null
}