在查看 C++14 元函数别名提案(TransformationTraits Redux, v2,N3655)时,我注意到,不仅类型到类型的转换(例如add_const
),类型到值的元函数(例如is_void
)也是类型别名。(在N3797中不存在)。
别名类型对值元函数有什么好处吗?我认为,可以在没有这些别名的情况下使用它们,例如enable_if_t<is_void<T>::value,T>
或者enable_if_t<is_void<T>{}(),T>
当存在转换操作时。(我猜is_void<T>::type::value
是一样的is_void<T>::value
)
如果值元函数的类型需要是别名,将它们别名为变量模板会更好吗(我没有 C++14 编译器并且从未使用过变量模板。所以语法可能是错误的)?例如别名is_void
为
template <class T>
constexpr bool is_void_t = is_void<T>::value;
代替
template <class T>
using is_void_t = typename is_void<T>::type;
这样就可以enable_if_t<is_void_t<T>,T>
不用boost风格写了enable_if
,写表达会更容易(egenable_if_t<(is_void_t<T> || is_integral_t<T>),T>