で明示的にオブジェクト:破壊尖った-する私が持っているdecltype
p->~decltype(*p)();
しかし、それは仕事をdoesntの:
T* p;
と私がやりたいと思います。
p->~T();
でも可能ですが、可能であればdecltype()
とします。
エラーメッセージ:
error: expected class-name before 'decltype'
編集:私は、配列の新しいのalloca +配置を使用してスタックに割り当てられた配列のためのVLAの使用を避けるためにしようとしている
ユースケース。新しい配置の後、スタック配列内のオブジェクトを明示的に破棄する必要があります。これが必要な理由私が困惑してる、
using T = ::std::remove_reference_t<decltype(*p)>;
p->~T();
しかし:私は私が行うことができ、問題を解決する方法を知っています。
'decltype(* P) 'は' T 'ではなく' T 'です。あなたが構文を受け入れても、それはまだ動作しません。 – hvd
意味がありません。これは、もはや関数を呼び出すことと同じではありません。ユースケースについて簡単に説明できますか? – Arunmu
私は不思議です、あなたはVLAが持っていないものを「alloca」と呼んでいますか? 'alloca'は、VLAやVLAが少なくとも例外を適切に処理し、必要に応じて自動的に構築して破壊するコンパイラサポートを持っているのと同じように非標準です。他にも重要な違いがありますか? – hvd