「placement new」演算子は次のように宣言されます。
void* operator new (std::size_t size, void* ptr) noexcept;
ただし、実際の割り当ては含まれないため、不適切な割り当て例外は排除されますが、ポインターが不適切な場所を指している可能性は依然としてあります。その場合、範囲またはオーバー/アンダーフロー エラーが発生することが予想されますが、発生しません。noexcept
代わりに単に実行を終了するように宣言されたという事実は?
また、これは、C++ 11 配置の前に new が直接クラッシュするstd::unexpected
のではなく、スローして処理しようとすることを意味しますか?std::set_unexpected
「念のため」配置の新しいオーバーロードをスローするべきではありませんか?