Ответ 1
Наличие спецификатора noexcept(x)
в объявлении функции означает, что функция не металирования тогда и только тогда, когда x
оценивает значение true
.
noexcept(y)
также может использоваться как оператор, оценивая значение true
если y
является небрасывающим выражением, и false
если y
может потенциально выбросить.
В сочетании это означает void foo() noexcept(noexcept(y));
означает: foo
не бросает точно, когда y
не бросает.
В данном случае вопроса, функция шаблон swap
для массивов объявляются не метание, если и только если замена отдельных членов массивов не является бросанием, что имеет смысл.