Ответ 1
"Требуется: не бросать" означает то, что вы догадались: если вы бросите, вы получите поведение undefined.
Кроме того, 17.6.5.12 [res.on.exception.handling]/p1 позволяет разработчикам добавлять исключение-исключение:
Любая из функций, определенных в стандартной библиотеке С++, может сообщить сбой, бросая исключение типа, описанного в его бросках: параграф. Реализация может усилить исключение спецификации для не виртуальной функции путем добавления небрасывающего noexcept-спецификации.
libstdС++ и libС++ mark std::hash
оператор вызова как noexcept
как соответствующее расширение. Они разрешены, но не требуются для этого.