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