2016-06-15 3 views
14

ブックC++ Concurrency in Actionは、std::copy_exceptionを使用してスローせずに例外を直接保存することが可能であることを将来の例外を保存4.2.4に述べています。しかし、私はstd::copy_exceptionが定義されている標準ライブラリヘッダを見つけることができないようです。どこで見つけることができますか?std :: copy_exceptionはどこに定義されていますか?アンソニー・ウィリアムズ

答えて

20

TL; DRstd::copy_exceptionは、最終的なC++ 11標準ため<exception>std::make_exception_ptrに改名されました。


委員会は、(おそらくboost::copy_exceptionから標準にコピー)名copy_exceptionは、次の理由で誤解を招くと判断しました。

template <class E> 
exception_ptr copy_exception(E e) { 
    try { 
     throw e; 
    } catch (...) { 
     return current_exception(); 
    } 
} 

引数としてexception_ptrで呼び出された場合ならば、関数は、引数として与えられたexception_ptrのコピーに別のexception_ptrポインティングを返すようcopy_exception関数は、引数のコピーにexception_ptrを返します。代わりにexception_ptr引数が指しているものを指すのではなく、このケースではcopy_exceptionという名前が誤解を招いていたため、この関数は最終的なC++ 11標準ではstd::make_exception_ptrに名前が変更されました。この問題の詳細と説明については、C++ Standard Library Defect Report 1130を参照してください。

std::make_exception_ptrの機能は、<exception>で定義されています。

関連する問題