Size: a a a

2020 March 21

FS

Flower Surgeon in pro.cxx
Совсем убирать нельзя. Но в текущем виде оно автора пропозала не устраивает и я, пожалуй, соглашусь с ним.
источник

PZ

Pavel Zhigulin in pro.cxx
Может тогда вообще проще запретить noexcept в шаблонах? Там где надо - компилятор сам выведет при инстанцировании, если ему хочется эффективной кодогенерации.

В остальных случаях noexcept в шаблоне - путь к весёлым костылям)
источник

SS

Sergey Sobolev in pro.cxx
Pavel Zhigulin
Я прочитал документ, там написано как плохо пихать везде noexcept, но так и не понял в чём собственно состоит идея/предложение.

Убрать noexcept из стандартной либы?
если я правильно понял, то noexcept в стандартной либе дает повод распространять его дальше в своем коде, но пройдет некоторое время и кто-нибудь решит выкинуть исключение в глубинах проекта из-за чего придется делать довольно трудоемкий рефакторинг всей цепочки noexcept функций и компилятор в этом никак нам не поможет => кучу ошибок и лучше будет вообще не связываться с исключениями и noexcept
источник

FS

Flower Surgeon in pro.cxx
Речь не только о шаблонах. Проблема куда фундаментальнее.
источник

FS

Flower Surgeon in pro.cxx
Sergey Sobolev
если я правильно понял, то noexcept в стандартной либе дает повод распространять его дальше в своем коде, но пройдет некоторое время и кто-нибудь решит выкинуть исключение в глубинах проекта из-за чего придется делать довольно трудоемкий рефакторинг всей цепочки noexcept функций и компилятор в этом никак нам не поможет => кучу ошибок и лучше будет вообще не связываться с исключениями и noexcept
Да, я так же и понял посыл примерно.
источник

nn

no name in pro.cxx
совсем убирать нельзя. как вариант, добавить noexcept(auto)
источник

ПК

Побитый Кирпич in pro.cxx
Sergey Sobolev
если я правильно понял, то noexcept в стандартной либе дает повод распространять его дальше в своем коде, но пройдет некоторое время и кто-нибудь решит выкинуть исключение в глубинах проекта из-за чего придется делать довольно трудоемкий рефакторинг всей цепочки noexcept функций и компилятор в этом никак нам не поможет => кучу ошибок и лучше будет вообще не связываться с исключениями и noexcept
Точно так же кто то в глубине стека захочет нарушить контракт, и хер знает что после этого случится. Пока для меня предложение выглядит как поблажка для тех, кто неправильно использует noexcept/исключения.
источник

FS

Flower Surgeon in pro.cxx
no name
совсем убирать нельзя. как вариант, добавить noexcept(auto)
тут ещё непонятно, возможно ли будет это auto вывести
источник

PZ

Pavel Zhigulin in pro.cxx
Sergey Sobolev
если я правильно понял, то noexcept в стандартной либе дает повод распространять его дальше в своем коде, но пройдет некоторое время и кто-нибудь решит выкинуть исключение в глубинах проекта из-за чего придется делать довольно трудоемкий рефакторинг всей цепочки noexcept функций и компилятор в этом никак нам не поможет => кучу ошибок и лучше будет вообще не связываться с исключениями и noexcept
Ну, это я так понял относится к части повествования про то, что если мы убираем noexcept, то компилятор не проверяет во всех использующих функциях, есть у них noexcept или нет - и мы получаем потенциальный terminate.

Проблема и правда есть, непонятно причем тут стандартная библиотека. Такую хрень может любой сделать
источник

SS

Sergey Sobolev in pro.cxx
Pavel Zhigulin
Ну, это я так понял относится к части повествования про то, что если мы убираем noexcept, то компилятор не проверяет во всех использующих функциях, есть у них noexcept или нет - и мы получаем потенциальный terminate.

Проблема и правда есть, непонятно причем тут стандартная библиотека. Такую хрень может любой сделать
кстати, такой вопрос, компилятор не проверяет это из-за трудоемкости задачи?
источник

ПК

Побитый Кирпич in pro.cxx
Pavel Zhigulin
Ну, это я так понял относится к части повествования про то, что если мы убираем noexcept, то компилятор не проверяет во всех использующих функциях, есть у них noexcept или нет - и мы получаем потенциальный terminate.

Проблема и правда есть, непонятно причем тут стандартная библиотека. Такую хрень может любой сделать
Можно разыменовать нулевой указатель и получить segfault (почти terminate). Где та принципиальная разница?
источник

ПК

Побитый Кирпич in pro.cxx
Sergey Sobolev
кстати, такой вопрос, компилятор не проверяет это из-за трудоемкости задачи?
Да
источник

ПК

Побитый Кирпич in pro.cxx
Я бы даже сказал, она принципиальна не разрешима
источник

ПК

Побитый Кирпич in pro.cxx
Либо забить, либо банить потенциально валидный код
источник

ПК

Побитый Кирпич in pro.cxx
Максимум варнинг наверное можно сделать
источник

FS

Flower Surgeon in pro.cxx
КМК, этим пусть статик аналайзер занимается, а не компилятор
источник

PZ

Pavel Zhigulin in pro.cxx
no name
совсем убирать нельзя. как вариант, добавить noexcept(auto)
Почему нельзя?
источник

nn

no name in pro.cxx
Pavel Zhigulin
Почему нельзя?
нужна возможность явно указывать, какое поведение ожидается
источник

PZ

Pavel Zhigulin in pro.cxx
no name
нужна возможность явно указывать, какое поведение ожидается
Зачем?
источник

FS

Flower Surgeon in pro.cxx
Pavel Zhigulin
Зачем?
Потому, что в move-конструкторах, например, нельзя бросать исключения.
источник