我正在學習如何使用條件noexcept
並遇到此問題。假設我有一個類:noexcept表達與類型特徵
template<typename T>
class Wrapper {
public:
Wrapper(T&& value) noexcept(/* ??? */)
: value_(std::move(value))
{}
private:
T value_;
};
對於/* ??? */
的一部分,我想我們可以使用noexcept(T(std::move(value)))
或std::is_nothrow_move_constructible<T>::value
,直到我偶然發現了this。
所以,如果我用noexcept(noexcept(T(std::move(value))))
,嚴格來說,我認爲「此構造noexcept
當且僅當構建和破壞一個T
是noexcept
」?
儘管投擲的析構器應該放在火上並燒燬。
你能解決這個問題嗎? 'noexcept(new T(std :: move(value)))'或someting?因爲它是一個未被評估的表達式,它實際上並沒有分配任何東西,但它也應該專門「泄漏」,因此dtor不應該參與......我想你可能需要使用新的無丟棄版本,因爲你不'要檢測'std :: bad_alloc'。 –