文档中的std :: enable_if示例

时间:2018-03-01 03:21:13

标签: c++ c++14 enable-if

此问题涉及std::enable_if及其中提供的示例的以下文档(为简洁起见,在上述示例的此问题中仅重现了相关的代码段):

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 ;.它是否正确?

0 个答案:

没有答案