此问题涉及std::enable_if
及其中提供的示例的以下文档(为简洁起见,在上述示例的此问题中仅重现了相关的代码段):
我从提供的示例用法代码中提出以下问题(请求参考完整代码的文档):
1
// #2
template<class T, class... Args>
std::enable_if_t<!std::is_trivially_constructible<T,Args&&...>::value> //Using helper type
construct(T* t,Args&&... args)
{
std::cout << "constructing non-trivially constructible T\n";
new(t, detail::inplace_t{}) T(args...);
}
上面new expression
的调用符合new
的哪个重载?它似乎不符合代码中的以下重载:
void* operator new(std::size_t, void* p, detail::inplace_t) {
return p;
}
在new expression的文档中,提到了以下重载:
new(2,f) T; // calls operator new(sizeof(T), 2, f)
// (C++17) or operator new(sizeof(T), std::align_val_t(alignof(T)), 2, f)
示例代码中使用的新表达式的重载是否符合上述规定?我很感激任何知道的人的解释。
2
在destroy()
方法的第二个重载中:
// #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();
}
如何阅读和解释表达式:
typename std::enable_if<
!std::is_trivially_destructible<T>{} &&
(std::is_class<T>{} || std::is_union<T>{}),
int>::type
基于我对std::enable_if
上的文档的理解,我将上述解释为&#34;如果T不是简单的可破坏的,并且是一个类或联合,具有类型为int&的公共成员#34 ;.它是否正确?