首页 > 解决方案 > 为什么使用 `declval` 定义`is_destructible`().~U()` 而不是 `declval ().~U()`?

问题描述

标签: c++language-lawyertypetraits

解决方案


所以我通过电子邮件询问了 Daniel Krügler,他允许我发表他的回答:

好问题 - 尽管答案相当微不足道,并且没有透露任何语言秘密:我知道std::declval<T>()在讨论的上下文中会返回一个右值引用(因此是一个右值),但在我的脑海中,我想表达translate p->~T(),根据语言再次对应于(*p).~T()([expr.ref]),因此逻辑结果是更改std::declval()调用以生成T析构函数应用到的左值。

我很确定我不相信直接declval()返回 T,这个辅助函数在我的脑海中烙印得太深了;-)


推荐阅读