2

C++ オブジェクトは、デストラクタ呼び出し構文を使用して明示的に破棄できます (非クラス型の擬似破棄)。しかし、広く受け入れられている構文に加えて、最近のほとんどのコンパイラは、デストラクタを呼び出す独自の方法をサポートしているようです。

using T = int;
const int x = 1;
int main() { 
    x.~T();             //ok everywhere
    x.~int();           //#1: ok in MSVC only
    x.~auto();          //#2: ok in GCC only
    x.~decltype(x)();   //#3: ok in Clang and MSVC only
}

すべてのコンパイラで動作する に加えてx.~T()、他に少なくとも 3 つのオプションがあります。デモ: https://gcc.godbolt.org/z/895bd9T5c

オプション#1、#2、または#3のいずれかが標準に従って合法ですか、それともすべてが対応するコンパイラの単なる拡張/バグですか?

4

1 に答える 1