Почему std:: array:: front и std:: array:: back not noexcept?
Я новичок в использовании спецификатора noexcept, и я не понимаю, почему std::array::front и std::array::back не объявлены noexcept (тогда как std::array::begin и std::array::end есть).
Существует специальный случай для массива нулевой длины (N == 0). В этом случае array.begin() == array.end(), что является некоторым уникальным значением. Эффект вызова front() или back() в массиве нулевого размера равен undefined.
Итак, поскольку мы можем иметь массив размером 0 front() и back(), может вызвать исключение
Стандартная политика noexcept заключается в том, чтобы отмечать только те функции, которые не могут или не должны терпеть неудачу, но не те, которые просто указываются не для исключения исключений. Другими словами, все функции, имеющие ограниченный домен (передать неправильные аргументы и вы получите поведение undefined), не являются noexcept, даже если они не заданы для throw.