Обычно конструкторы по умолчанию определяются как noexcept
, когда это возможно.Однако std::pair
имеет конструктор по умолчанию, определенный без noexcept
(т.е. не nothrow
).Вы можете проверить это сами здесь .
Вы можете видеть, что конструктор по умолчанию для std::pair
определен без noexcept
(первый элемент из ссылки), и переместите конструктор для std::pair
по умолчанию (8-й элемент из ссылки).
Поскольку вы не объявили / не определили никакого конструктора для Foo
, его конструкторы являются значениями по умолчанию, поэтому noexcept
.