C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 类型扣除后功能模板中的替换顺序是否有保证?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
虑这个功能模板:
template<typename T>
typename soft_error<T>::type foo(T,typename hard_error<T>::typE)
{ }

调用foo()中的第一个参数的类型推导出类型T后,编译器将继续替换T并实例化函数签名.

如果首先执行返回类型的替换,导致简单的替换失败,编译器将在计算过载集并搜索其他可行重载(SFINAE)时丢弃该函数模板.

另一方面,如果首先发生第二功能参数的替换,则导致硬错误(例如由于非紧急上下文中的替换失败),整个编译将失败.

问题:对函数参数和返回类型进行替换的顺序是否有保证?

注意:This example似乎表明,在所有主要的编译器(VC11被单独测试并给出相同的结果)之后,代替返回类型的替换发生在替换参数类型之前.

解决方法@H_696_16@
[注意:这不是原本意在作为一个自我回答的问题,而是在制定问题时我找解决办法)

不符合现行标准.

然而,this Defect Report(Xeo提供)表明,这的是这样的.以下是C11标准第14.8.2 / 7段(已经成为n3485 draft的一部分)的拟议新措辞:

正如Nicol Bolas在对问题的评论中正确指出的那样,词法是指在参数类型之后替换尾随返回类型,如this live example所示.

大佬总结

以上是大佬教程为你收集整理的c – 类型扣除后功能模板中的替换顺序是否有保证?全部内容,希望文章能够帮你解决c – 类型扣除后功能模板中的替换顺序是否有保证?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。