N2179 ひとまず終了
コピー失敗時のstd::bad_allocに対応しました。
差分
テストコードもg++とVC++でコピーコンストラクタの呼ばれるタイミングが違うので修正しています。
これ書いていて気が付いたんですけど、copy_exception()の定義、
template<class E> inline exception_ptr copy_exception(E e) { try { throw e; } catch (...) { return current_exception(); } }
だと、copy_exception()の呼び出し時にeをコピーしてしまうんで、ここで例外が発生するとexception_ptrが得られないんですよね。
この関数は例外に対する要件が書かれていないので間違いではないんですけど、何か変な感じです。
と、疑問を残しつつも実装はおしまいです。