4
假設我有以下模板:模板偏特性狀
template <typename T> union example {
T t;
constexpr example(const T & t) : t(t) {};
/* We rely on owning class to take care
* of destructing the active member */
~example() {};
};
因爲析構函數存在的,example<T>
絕不會平凡破壞(因此沒有,也就是說,一個文本類型)。我倒是喜歡向有一個偏特像
template <typename T> union
example<std::enable_if_t<std::is_trivially_destructible<T>::value, T>> {
T t;
constexpr example(const T & t) : t(t) {};
};
讓example<T>
是平凡破壞時T
是,但不幸的是,讓我的(合理的,事後)警告
警告:類模板部分特化包含無法推導出的模板 參數; 這部分專業化將永遠不會使用
那麼有沒有什麼辦法得到我想要的東西?
爲什麼你需要明確寫出dtor?你不能'=默認'嗎? (或者這是不可能的,如果它的隱式定義將被刪除?) – dyp
唉,'= default'設置刪除析構函數,如果'T'不是一般的可破壞的,至少在3.4節。 –
@dyp:這對工會來說沒有意義。見9.5/2:析構函數必須是用戶提供的。 –