Open apolukhin opened 3 years ago
yndx-antoshkka, 31 августа 2018, 13:16 Это не очень сложно сделать - надо исправить вот эту главу eel.is/c++draft/except.spec . Стоит туда добавить что-то наподобие "При дефиниции невиртуальной функции члена класса внутри класса и отсутствии спецификатора noexcept спецификатор noexcept(noexcept(statements) && ...) добавляется автоматически".
Есть пара страшных моментов - времена компиляции и бинарная совместимость. С C++17 noexcept является частью сигнатуры функции, так что если начать выводить его автоматически - то пользовательский код перестанет линковаться. Возможно стоит дополнительно ограничить, что noexcept выводится только для имён с internal linkage http://eel.is/c++draft/basic.link
Попробуйте накидать diff/правок для стандарта. Свои правки и идеи скидывайте мне - обещаю смотреть и помогать советом и делом. Как проработаем мелочи - можно будет закинуть письмо в std-proposal форум, а потом и полноценный proposal сделать.
Andrey Davydov, 31 августа 2018, 13:39 yndx-antoshkka, в данный момент нет noexcept(statement) только noexcept(expression). А statement'ов много разных, надо для каждого при таком подходе определить noexcept.
Андрей Руссков, 28 сентября 2018, 0:19 yndx-antoshkka, по идее можно же сделать неявный noexcept(auto) для всех inline функций, включая определенные в теле класса методы? Просто надо будет заодно указать в стандарте (если это еще не сделано) что inline foo(); и inline foo() noexcept; в разных TU никогда не конфликтуют
Перенос предложения: голоса +2, -1 Автор идеи: Konstantin Stupnik
Собственно для кода типа:
оператор noexcept вернёт для bar() false, когда у компилятора есть всё, что бы понять, что этот метод никогда не может кинуть исключение.