除了重新抛出它之外,我可以用std :: exception_ptr做什么

man*_*ans 5 c++ exception-handling exception c++11

我有一个类型的对象std::exception_ptr,我想调用what()它,但似乎没有办法做到这一点(正如在这个答案中解释的:我如何调用std :: exception_ptr上的what()).

在通过互联网搜索之后,似乎除了重新投掷并将其捕获std::exception&以便能够执行此操作之外,我无法对其进行任何操作.

这对我来说有点奇怪,但是我想检查一下:std::exception_ptr然后再用它来重新抛出它来获得期望的细节怎么办?

C++ 14或其他版本的C++是否有任何变化

lcs*_*lcs 4

很不幸的是,不行。该标准仅保证以下内容std::exception_ptr

18.8.5 异常传播

1 类型Exception_ptr 可用于引用异常对象。

2 exception_ptr 应满足 NullablePointer (17.6.3.3) 的要求。

3 exception_ptr 类型的两个非空值当且仅当它们引用相同的异常时才是等效的并且比较相等。

4Exception_ptr 的默认构造函数生成该类型的 null 值。

5 exception_ptr 不得隐式转换为任何算术、枚举或指针类型。

7 为了确定是否存在数据争用,对Exception_ptr 对象的操作应仅访问和修改Exception_ptr 对象本身,而不是它们引用的异常。

另外,这里指出,

对对象执行任何其他操作(例如取消引用它),如果库实现完全支持的话,会导致未定义的行为