Тривиальные inline геттеры должны быть автоматически noexcept

Konstantin Stupnik
Konstantin Stupnik

Собственно для кода типа:

 

class Foo{

public:

  int bar()const

  {

    return m_bar;

  }

private:

  int m_bar;

};

оператор noexcept вернёт для bar() false, когда у компилятора есть всё, что бы понять, что этот метод никогда не может кинуть исключение.

1
рейтинг
2 комментария
yndx-antoshkka

Это не очень сложно сделать - надо исправить вот эту главу 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 сделать.

yndx-antoshkka
Andrey Davydov

yndx-antoshkka, в данный момент нет noexcept(statement) только noexcept(expression). А statement'ов много разных, надо для каждого при таком подходе определить noexcept.

Andrey Davydov
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения