Может ли компилятор изменить порядок установки переменных и throw()
op в С++? Или стандарт С++ 14882-1998 разрешает или запрещает компилятору это преобразование?
Для кода:
bool funct()
{
bool succeeded = false;
bool res_throw = false;
try {
throw("it");
succeeded = true;
}
catch(...) {
res_throw = true;
}
cout << "Result of throw: " << res_throw << endl;
cout << "succeeded: " << succeeded << endl;
return succeeded;
}
Может ли выход быть
Result of throw: true
succeeded: true
Стандарт говорит: «[intro.execution]#7»:
изменение объекта.. все побочные эффекты, которые являются изменениями в состоянии среды выполнения
В определенных точках последовательности выполнения, называемых точками последовательности, все побочные эффекты предыдущих оценок должны быть завершены, и никаких побочных эффектов последующих оценок не должно быть.
Является ли оператор throw
точкой последовательности?