Anthony Williams的书 C++ Concurrency in Action 在 4.2.4保存未来的例外中说明可以直接存储例外而不会使用std::copy_exception
。但是我似乎无法找到定义std::copy_exception
的标准库头。我在哪里可以找到它?
答案 0 :(得分:20)
tl; dr :std::copy_exception
已在std::make_exception_ptr
中重命名为<exception>
,以获得最终的C ++ 11标准。
委员会认为名称copy_exception
(可能从boost::copy_exception
复制到标准中)具有误导性,原因如下。
copy_exception
函数将exception_ptr
返回到其参数的副本,就像
template <class E>
exception_ptr copy_exception(E e) {
try {
throw e;
} catch (...) {
return current_exception();
}
}
当使用exception_ptr
作为参数调用时,该函数将返回另一个exception_ptr
指向作为参数给出的exception_ptr
的副本,而不是指向{{1} }参数指向。由于名称exception_ptr
在这种情况下具有误导性,因此对于最终的C ++ 11标准,该函数已重命名为copy_exception
。有关此问题的详细信息和讨论,请参阅C++ Standard Library Defect Report 1130。
std::make_exception_ptr
函数在std::make_exception_ptr
中定义。