std :: copy_exception在哪里定义?

jot*_*tik 17 c++ exception-handling exception language-lawyer c++11

安东尼·威廉姆斯的书中的C++ Concurrency in Action4.2.4中保留了一个未来的例外,它可以直接存储异常,而不会抛弃使用std::copy_exception.但是我似乎无法找到std::copy_exception定义的标准库头.我在哪里可以找到它?

jot*_*tik 21

TL;博士: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();
    }
}
Run Code Online (Sandbox Code Playgroud)

当使用exception_ptras参数调用时,该函数将返回另一个exception_ptr指向给exception_ptr定as参数的副本,而不是指向exception_ptr参数指向的内容.因为该名称copy_exception对于这种情况具有误导性,所以该函数被重命名std::make_exception_ptr为最终的C++ 11标准.有关此问题的详细信息和讨论,请参阅C++标准库缺陷报告1130.

std::make_exception_ptr功能定义于<exception>.