Рассмотрим код:
#include <iostream> int ct = 1; struct G { ~G() { ct--; } }; int main() { (G()); // (1) std::cout << ct << std::endl; return 0; }
Как вы думаете - что напечатает данная программа?
Весь вопрос в том, когда будет вызван деструктор временного объекта, созданного в строке (1)
: сразу после знака ;
в этой же строке или в конце блока на символе }
?
Если первое, то программа выведет “0”, если второе, то “1”.
Я проверил на 6 разных компиляторах на разных платформах - везде печатается “0”, что соответствует стандарту.
Но на отдельно выделенной версии Sun C++ 5.8 2005⁄10/13 данная программа печатает “1”!
Мы провели с коллегой интересные пару часов, пытаясь в огромной программe локализовать этот коварный глюк.