Здравствуйте, Xchllataa, Вы писали:
X>int foo(int bar)
X>{
X> if(bar == 0xdeadbeef)
X> DBG_THROW() << "Oops...";
X> return 42;
X>}
X>int main()
X>{
X> try
X> {
X> DBG_THROW() << "test " << foo(0xdeadbeef);
X> }
X> catch (std::exception const& e)
X> {
X> std::cout << e.what() << std::endl;
X> }
X>}
X>Однако в данном примере функция foo() вызывается до того, как будет создан первый временный объект Throw(), и в результате исключения внутри foo() он не будет создан вообще. Т.е. проблемы вроде и нет?
Порядок вычисления операндов не специфицирован. Так, на MSVC 2005 этот код падает в Release и не падает в Debug.