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のいずれかが標準に従って合法ですか、それともすべてが対応するコンパイラの単なる拡張/バグですか?