首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重载解析中的约束是否受差异it类型限定符的影响?

问重载解析中的约束是否受差异it类型限定符的影响?
EN

Stack Overflow用户
提问于 2022-05-16 09:18:41
回答 1查看 83关注 0票数 4

具有以下简单代码:

代码语言:javascript
复制
#include <concepts>

auto f(const auto&) { }
auto f(std::integral auto) {}

int main() 
{ 
    f(5); 
}

我们接到一个含糊不清的电话与clang & gcc,但MSVC选择了更多的约束。到目前为止,我还没有发现任何证据支持gcc的行为。那么,这是两个编译器中的一个bug,还是有某种原因使这个调用变得模糊不清?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-16 09:35:28

在不考虑约束的情况下,调用是模棱两可的,因为第一次重载被推演为函数参数类型const int&,而第二次重载被推导为int。当使用int类型的prvalue调用时,两者都不会被认为比另一个更好,而且在模板的通常偏序方面,const auto&或auto也不是更专门化的。

根据[temp.func.order]/6.2.2对函数模板的约束,如果从模板参数替换后的函数参数类型不对应,则不考虑模板的约束。

这里,第一个重载将函数参数推导为const int&,第二个重载推导为int。这是不平等的。因此,模板的偏序也不会比基于任何约束的模板更专业化。

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

https://stackoverflow.com/questions/72256841

复制
相关文章

相似问题

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