Size: a a a

cxx.Дискуссионная

2020 April 18

TS

Till Schneider in cxx.Дискуссионная
/dev/urandon ¯\_(ツ)_/¯
Нет, уб, которое реализовано как std::terminate большинством компиляторов
Определено стандартом, там std::terminate
источник

RM

Roy Mustang in cxx.Дискуссионная
Так вот, там был пример с перемещением
источник

RM

Roy Mustang in cxx.Дискуссионная
Когда new к примеру бросает исключение
источник

TS

Till Schneider in cxx.Дискуссионная
Точно не ub
источник

RM

Roy Mustang in cxx.Дискуссионная
Тогда получается что в операторе =, у нас дохнет указатель
источник

RM

Roy Mustang in cxx.Дискуссионная
Там эта проблема обходилась тем что создавался временный указатель, который принимал new
источник

O

Ofee in cxx.Дискуссионная
Non-throwing functions are permitted to call potentially-throwing functions. Whenever an exception is thrown and the search for a handler encounters the outermost block of a non-throwing function, the function std::terminate is called:
источник

TS

Till Schneider in cxx.Дискуссионная
Ofee
Non-throwing functions are permitted to call potentially-throwing functions. Whenever an exception is thrown and the search for a handler encounters the outermost block of a non-throwing function, the function std::terminate is called:
источник

TS

Till Schneider in cxx.Дискуссионная
Implementation defined не ub тоже 😜
источник

RM

Roy Mustang in cxx.Дискуссионная
Ofee
Non-throwing functions are permitted to call potentially-throwing functions. Whenever an exception is thrown and the search for a handler encounters the outermost block of a non-throwing function, the function std::terminate is called:
ааа вот оно что
источник

RM

Roy Mustang in cxx.Дискуссионная
Получается, если родительская функция является noexcept, а она что-то вызывает и если там бросится исключение, то в момент когда стек вернется к noexcept произойдет terminate?
источник

RM

Roy Mustang in cxx.Дискуссионная
а что если это исключение будет отловлено функцией выше?
источник

TS

Till Schneider in cxx.Дискуссионная
Roy Mustang
а что если это исключение будет отловлено функцией выше?
Покажи кот
источник

RM

Roy Mustang in cxx.Дискуссионная
Например, у нас есть
void soo() {
  throw //...
}
void boo() noexcept { soo() }
void foo() {
try {
  boo()
} catch (...)  { }
источник

TS

Till Schneider in cxx.Дискуссионная
Roy Mustang
Например, у нас есть
void soo() {
  throw //...
}
void boo() noexcept { soo() }
void foo() {
try {
  boo()
} catch (...)  { }
Terminate будет
источник

RM

Roy Mustang in cxx.Дискуссионная
Вот тут у нас foo может ловить исключения, но она вызывает boo, которая noexcept, но он вызывает в свою очередь soo, который бросает исключение
Вопросы:
1) При выбросе исключения в soo(), исключение дойдет до функции foo?
2) Может ли foo отловить исключение из soo() ?
источник

O

Ofee in cxx.Дискуссионная
Till Schneider
Implementation defined не ub тоже 😜
Мне кажется, что это косяк вообще, ибо, имхо, то, что я процитировал противоречит тому, что ты скинул, возможно, дело в разных версиях стандарта...
источник

RM

Roy Mustang in cxx.Дискуссионная
Я предполагаю что если soo бросит исключение, то в boo (noexcept) произойдет terminate? Даже если foo выше пытается ловить throw
источник

TS

Till Schneider in cxx.Дискуссионная
Там можно вроде пометиь деструктор мембер переменной как кидайщий исключения, тогда и дефолтный деструктор будет кидать вроде как, но это не точно
источник

/dev/urandon ¯\_(ツ)_... in cxx.Дискуссионная
Да, моя ошибка
источник