c++ - std::copy_exception 在哪里定义?

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

这本书 C++ Concurrency in Action Anthony Williams 在 4.2.4 为将来保存异常 中指出,可以直接存储异常而无需使用 std::copy_exception 抛出。但是,我似乎无法找到定义 std::copy_exception 的标准库头文件。我在哪里可以找到它?

最佳答案

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();
    }
}

当使用 exception_ptr 调用时作为参数,该函数将返回另一个 exception_ptr指向 exception_ptr 的拷贝作为参数给出,而不是指向 exception_ptr论点指向。因为名字copy_exception在这种情况下具有误导性,函数被重命名为 std::make_exception_ptr用于最终的 C++11 标准。见 C++ Standard Library Defect Report 1130有关此问题的详细信息和讨论。

std::make_exception_ptr函数定义在 <exception> .

关于c++ - std::copy_exception 在哪里定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37831458/

相关文章:

C++ 唯一指针 : memory leak

java - JNA 在个人电脑上的不同行为

c++ - 如何在不提供有效生成器的情况下告诉 boost::karma::rule 不消耗其属性?

c++ - 如何正确地从函数中给出 vector (type_traits)

java - 如何处理异常并完成方法的功能而不提示用户已发生的异常

c++ - 如何给函数取其他名称?

c++ - 对象的地址空间独立表示

c++11 - 如何在另一个命名空间中使用一个命名空间的指针,并且两个命名空间都在另一个类中使用

java - 如何在 Spring 3.x 中检索默认的 HandlerExceptionResolver 实例?

java - 当没有与键关联的对象时应该抛出什么异常?