C++ では、次のコードでコンパイラ エラーが発生します。
void destruct1 (int * item)
{
item->~int();
}
このコードはほぼ同じです。int を別の型に typedef すると、魔法のようなことが起こります。
typedef int myint;
void destruct2 (myint * item)
{
item->~myint();
}
2 番目のコードが機能するのはなぜですか? int は型定義されているという理由だけでデストラクタを取得しますか?
なぜこれをやりたいのか疑問に思っている場合: これは、C++ コードのリファクタリングに由来します。標準のヒープを削除し、自作のプールに置き換えます。これには、placement-new とデストラクタを呼び出す必要があります。プリミティブ型のデストラクタを呼び出すのは役に立たないことはわかっていますが、後で POD を実際のクラスに置き換える場合に備えて、コード内にデストラクタが必要です。
裸の int は機能しないが、typedef の int は機能することがわかったのは、かなりの驚きでした。
ところで-テンプレート関数を含むソリューションがあります。テンプレート内で typedef するだけで、すべて問題ありません。