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

时间:2016-12-15 15:53:03

标签: c++ c++11 exception exception-handling

我有std::exception_ptr类型的对象,我想在其上调用what(),但似乎无法做到这一点(正如在这个答案中解释的那样:How do I make a call to what() on std::exception_ptr )。

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

对我来说有点奇怪,但是我想检查一下:std::exception_ptr可以做什么,然后重新抛出它以获得期望的细节?

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

1 个答案:

答案 0 :(得分:2)

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

  

18.8.5异常传播

     

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

     

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

     

3 exception_ptr类型的两个非null值是等效的,当且仅当它们引用时才比较相等   同样的例外。

     

4 exception_ptr的默认构造函数产生类型的空值。

     

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

     

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

此外,注意到here

  

对象执行任何其他操作(例如解除引用),如果库实现支持,则会导致未定义的行为