请教一个关于std::enable_if的问题
这是cppreference.com上的两个例子。
// #4, enabled via a template parameter
template<class T,
typename std::enable_if<
!std::is_trivially_destructible<T>{} &&
(std::is_class<T>{} || std::is_union<T>{}),
int>::type = 0>
void destroy(T* t)
{
std::cout << "destroying non-trivially destructible T\n";
t->~T();
}
我的问题:如果T满足这个predicate (!std::is_trivially_destructible<T>{}
&&(std::is_class<T>{} || std::is_union<T>{}))的话,那么std::enable_if<
predicate,int>::type应该就是int。可是这后面弄一个“=0”是什么意思呢?
// #5, enabled via a template parameter
template<class T,
typename = std::enable_if_t<std::is_array<T>::value> >
void destroy(T* t) // note, function signature is unmodified
{
for(std::size_t i = 0; i < std::extent<T>::value; ++i) {
destroy((*t)[i]);
}
}
我的问题:如果T是array的话,那么
std::enable_if_t<std::is_array<T>::value>就应该是void,那前面弄一个"
typename="是什么意思呢?