Anthony Williams kitap C++ Concurrency in Action o std::copy_exception
kullanarak atma olmadan doğrudan bir istisna saklamak mümkündür gelecek için bir istisna kaydetme 4.2.4 yılında belirtmektedir. Ancak, std::copy_exception
'un tanımlandığı standart kitaplık üstbilgisini bulamıyor gibi görünüyor. Nereden bulabilirim?std :: copy_exception nerede tanımlandı?
14
A
cevap
20
tl; dr: std::copy_exception
son C++ 11 standardı için <exception>
içinde std::make_exception_ptr
yeniden adlandırıldı.
komite
(muhtemelenboost::copy_exception
gelen standart kopyalanan) adı
copy_exception
aşağıdaki nedenlerle yanıltıcı olduğuna karar verdi. argüman olarak verilen argüman olarak bir
exception_ptr
ile çağrıldığında
template <class E>
exception_ptr copy_exception(E e) {
try {
throw e;
} catch (...) {
return current_exception();
}
}
, fonksiyon exception_ptr
bir kopyası başka exception_ptr
işaret dönecekti sanki
copy_exception
fonksiyonu, onun argümanının bir kopyasına bir exception_ptr
döndürür exception_ptr
bağımsız değişkeninin ne gösterdiğine işaret etmek yerine. Bu durum için adı yanıltıcı olduğundan, işlev son C++ 11 standardı için std::make_exception_ptr
olarak yeniden adlandırıldı. Bu konuda ayrıntılı bilgi ve tartışma için C++ Standard Library Defect Report 1130'a bakın.
std::make_exception_ptr
işlevi <exception>
'da tanımlanmıştır.