In the C++ standard there is the following definition:
template <class T, size_t N> void swap(T (&a)[N], T (&b)[N])
noexcept(noexcept(swap(*a, *b)));
What does noexcept(noexcept(swap(*a, *b))) do?
In the C++ standard there is the following definition:
template <class T, size_t N> void swap(T (&a)[N], T (&b)[N])
noexcept(noexcept(swap(*a, *b)));
What does noexcept(noexcept(swap(*a, *b))) do?
Having the noexcept(x) specifier in a function declaration means that the function is non-throwing if and only if x evaluates to true.
noexcept(y) can also be used as an operator, evaluating to true if y is a non-throwing expression, and to false if y can potentially throw.
Combined, this means void foo() noexcept(noexcept(y)); means: foo is non-throwing exactly when y is non-throwing.
In the case in the question, the function template swap for arrays is declared to be non-throwing if and only if swapping individual members of the arrays is non-throwing, which makes sense.