std :: copy_exception定义在哪里?

时间:2016-06-15 09:29:49

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

Anthony Williams的书 C++ Concurrency in Action 4.2.4保存未来的例外中说明可以直接存储例外而不会使用std::copy_exception。但是我似乎无法找到定义std::copy_exception的标准库头。我在哪里可以找到它?

1 个答案:

答案 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中定义。