何が機能するかを調べるexception_ptr
と、C++11 標準は (18.8.5/7) と述べています。
同じ例外オブジェクトを参照する exception_ptr オブジェクトで rethrow_exception を使用しても、データ競合は発生しません。[注: rethrow_exception が (コピーではなく) 同じ例外オブジェクトを再スローする場合、その再スローされた例外オブジェクトへの同時アクセスにより、データ競合が発生する可能性があります...
この奇妙な「注」が適用されるケースは見つかりません。説明されている効果rethrow_exception
は「スロー: p が参照する例外オブジェクト」ですが、15.1/3 では、一般的な例外スロープロセスの義務を説明しており、「例外コピーをスローする」ことが義務付けられています。 -例外オブジェクトと呼ばれる一時オブジェクトを初期化します。」
奇妙なメモは、rethrow_exception がこのコピー初期化をスキップすることを意味します。しかし、これは本当に可能ですか?