首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么`is_­destructible`是使用`declval<U&>().~U()`而不是`declval<U>().~U()‘定义的?

为什么`is_­destructible`是使用`declval<U&>().~U()`而不是`declval<U>().~U()‘定义的?
EN

Stack Overflow用户
提问于 2019-02-14 21:44:10
回答 1查看 404关注 0票数 17

根据is_destructible (destructible)的定义,在以下情况下,is_­destructible_v<T>true

T是一个引用类型,或者T是一个完整的对象类型,当将表达式declval<U&>().~U()作为未计算的操作数处理时,表达式declval<U&>().~U()是很好的格式,其中Uremove_­all_­extents_­t<T>

为什么它使用declval<U&>().~U()而不是declval<U>().~U()

declval的用词在https://cplusplus.github.io/LWG/issue2049中增加,以解决定义中抽象类型的问题。也许作者认为declval<U>有返回类型的U,所以它不适用于抽象类型?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-16 21:06:50

于是我通过电子邮件问丹尼尔·克鲁格,他允许我公布他的答案:

好问题--尽管答案相当琐碎,并且没有透露任何语言秘密:我知道std::declval<T>()会在讨论的上下文中返回一个rvalue引用(因此是一个rvalue),但在我的脑海中,我想表达翻译p->~T()的图片,这同样符合(*p).~T() (expr.ref),所以逻辑上的结果是更改std::declval()调用以生成应用析构函数的T的lvalue。 我很确定我不相信declval()直接返回了T,这个助手函数在我的脑海中被深深地烧掉了;)

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54699526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档