Подтвердить что ты не робот

Где указано std:: copy_exception?

Книга С++ Concurrency в действии от Anthony Williams гласит в 4.2.4 Сохранение исключения в будущем, которое можно сохранить исключение напрямую без металирования с помощью std::copy_exception. Однако я не могу найти стандартный заголовок библиотеки, где std::copy_exception определен. Где я могу его найти?

4b9b3361

Ответ 1

tl; dr: std::copy_exception был переименован в std::make_exception_ptr в <exception> для окончательного стандарта С++ 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 для окончательного стандарта С++ 11. Подробнее см. Отчет об ошибках стандартной библиотеки С++ 1130 и обсудите эту проблему.

Функция std::make_exception_ptr определена в <exception>.