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:析构函数必须是用户提供的。 –