According to the C++23 standard, what is the output of this program?
#include <iostream>
class A {
public:
A() { std::cout << "a"; }
~A() { std::cout << "A"; }
};
int i = 1;
int main() {
label:
A a;
if (i--)
goto label;
}Control passes through A a; twice. Does it make more sense to construct a both times, or just the first? Should the destructor be called the same number of times as the constructor?
aAaA
The standard says this about jump statements in §[stmt.jump.general]¶note-1:
On exit from a scope (however accomplished), objects with automatic storage duration that have been constructed in that scope are destroyed in the reverse order of their construction.