我有std::exception_ptr
类型的对象,我想在其上调用what()
,但似乎无法做到这一点(正如在这个答案中解释的那样:How do I make a call to what() on std::exception_ptr )。
在互联网上搜索后,除了重新投掷它并在std::exception&
中捕获它以便能够执行此操作之外,我似乎无法对其进行任何操作。
对我来说有点奇怪,但是我想检查一下:std::exception_ptr
可以做什么,然后重新抛出它以获得期望的细节?
C ++ 14或其他版本的C ++是否有任何变化
答案 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,
对象执行任何其他操作(例如解除引用),如果库实现支持,则会导致未定义的行为。