2016-06-15 28 views
14

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ı?

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

(muhtemelen boost::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.