В случае строгого исключения кода Йона Калба для решения примера Cargill Widget, что мешает компилятору переорганизовать операции и, таким образом, сделать код не очень безопасным для исключений?Что мешает оптимизации компилятора переупорядочить сильно исключающий код код?
#include <algorithm> // std::swap
template< typename T1, typename T2 >
class Cargill_Widget
{
public:
Cargill_Widget& operator=(Cargill_Widget const& r_other)
{
using std::swap;
T1 temp_t1(r_other.m_t1); // may throw
T2 temp_t2(r_other.m_t2); // may throw
/* The strong exception-safety line */
swap(m_t1, temp_t1); // no throw
swap(m_t2, temp_t2); // no throw
return *this;
}
private:
T1 m_t1;
T2 m_t2;
};
ли это «компилятор не может изменить наблюдаемое поведение» правила?
Ссылка:
- Джон KALB в "Exception-Safe Code" Презентация Слайды: http://www.exceptionsafecode.com/slides/esc.pdf