我有明確的反對:破壞尖,與decltype
T* p;
,我想這樣做:
p->~decltype(*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
我很好奇,'alloca'給你帶來的是什麼,VLA不會呢? 'alloca'與VLA一樣非標準,VLA至少具有編譯器支持來正確處理異常並根據需要自動構建和銷燬。還有其他一些重要的區別嗎? – hvd