大佬教程收集整理的这篇文章主要介绍了c – 由clang采取的免费扣除指南 – 谁是正确的?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
template <typename... Types> struct list { template <typename... Args> list(Args...) { static_assert(sizeof...(Types) > 0); } }; template <typename... Args> list(Args...) -> list<Args...>; int main() { list l{0,0.1,'a'}; }
我希望decltype(l)是list< int,double,char>.不幸的是,g 7.2和g trunk失败了静态断言. clang 5.0.0和clang trunk按预期编译和工作.
这是一个g bug吗?或者,为什么不应该遵循演绎指南?
template <typename... Args,typename = std::enable_if_t<sizeof...(Args) == sizeof...(Types)>> list(Args...) { static_assert(sizeof...(Types) > 0); }
template <class... Types,class... Args> list<Types...> __f(Args... ); // constructor template <class... Args> list<Args...> __f(Args... ); // deduction-guide
两者都是有效的(类型……在第一种情况下可以推断为空),但这里的调用应该是模糊的 – 既不比另一种更专业.类型…不参与此处的订购(类似于[temp.deduct.partial]/12中的示例).因此,正确的行为是进入下一个决胜局,即favors deduction-guides.因此,这应该是一个列表< int,char>.
以上是大佬教程为你收集整理的c – 由clang采取的免费扣除指南 – 谁是正确的?全部内容,希望文章能够帮你解决c – 由clang采取的免费扣除指南 – 谁是正确的?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。