Неэкземплярные функции нельзя помечать
const
, потому что этот модификатор относится к состоянию, которого обычная функция не имеет.
FYI: "сахарные" лямбды могут иметь состояние (замыкание), но фактически, если лямбда захватывает переменную, то это уже не функция, а функтор, т.е. объект.Да и, кстатиerr
при выходе из функции what
в тот же момент умирает. По Стандарту срок жизни локальных переменных может продлеваться лишь до смерти ближайшей константной ссылки на них. Срок жизни других данных не гарантируется после покидания скоупа. Мне кажется, здесь имеет место еще и компиляторозависимое колдунство.