動きますよね?gotoでも

と、
id:ntnekさんからTBをいただいたので、

もちろん、gotoで脱出すれば良いんですけどね。
…いやなんか昔、gotoだとブロック脱出時にデストラクタが上手く動かないと信じていた時期があって、その影響なんですが。
…あれ?動きますよね、デストラクタ?gotoでも?

do {} while (0) - ntnekの日記
class Hoge {
public:
    Hoge() {
        cout << "constructor\n";
    }
    ~Hoge() {
        cout << "destructor\n";
    }
};

int main()
{
    if (1) {
        
        Hoge hoge;
        if (1) {
            goto HOGE;
        }
        cout << "Hoge";
    }
HOGE:
    return 0;
}

こんなんでもちゃんとデストラクタが呼ばれる事は確認してたりします。

そして、やっぱり批判が多いわけだけども、
「ラベル名を考えるコスト」から考えると
使いたくなる気持ちが分かる気がした。

まあ、推奨ではないにしても許容かも……、とか。
(そもそもifならいらないんですけどね)