次のコードを検討してください。
#include <iostream>
struct A {
~A() { std::cout << "~A" << std::endl; }
};
struct B {
~B() { std::cout << "~B" << std::endl; }
};
struct C {
~C() { std::cout << "~C" << std::endl; }
void operator<<(const B &) {}
};
C f(const A &a = A()) {
return C();
}
int main() {
f(A()) << B();
}
GCC でコンパイルして実行すると、次の出力が得られます。
~C
~A
~B
他のコンパイラでコンパイルしたときに、タイプ A、B、および C の一時オブジェクトのデストラクタがこの順序で呼び出されることが保証されていますか? 一般に、一時的なものがある場合、デストラクタ呼び出しの順序は何ですか?