C++標準 には、次の定義があります。
_template <class T, size_t N> void swap(T (&a)[N], T (&b)[N])
noexcept(noexcept(swap(*a, *b)));
_
noexcept(noexcept(swap(*a, *b)))
は何をしますか?
関数宣言にnoexcept(x)
specifier があることは、x
がtrue
と評価される場合にのみ、関数がスローされないことを意味します。
noexcept(y)
は operator としても使用でき、true
が非スロー式の場合はy
と評価され、false
if y
がスローする可能性がある場合。
結合すると、これはvoid foo() noexcept(noexcept(y));
が意味することを意味します:foo
がスローされない場合、y
はスローされません。
問題のケースでは、配列の関数テンプレートswap
は、配列の個々のメンバーのスワップがスローされない場合にのみスローされないように宣言されています。