ixS*_*Sci 5 c++ c++-concepts c++20
有以下简单代码:
#include <concepts>
auto f(const auto&) { }
auto f(std::integral auto) {}
int main()
{
f(5);
}
Run Code Online (Sandbox Code Playgroud)
我们对 clang 和 gcc 的调用不明确,但 MSVC 选择了更受约束的调用。到目前为止,我没有发现任何可以支持 clang 和 gcc 行为的内容。那么这是两个编译器中的错误还是有什么东西使这个调用不明确?
在不考虑约束的情况下,调用是不明确的,因为第一个重载被推导为函数参数类型const int&,第二个重载被推导为int. 当使用类型的纯右值调用时,两者都不会被认为比另一个更好int,并且在模板的通常部分排序中const auto&也auto不会更专业。
根据[temp.func.order]/6.2.2,如果从模板参数推导替换后的函数参数类型不对应,则不考虑对函数模板的约束。
这里,第一个重载将函数参数推导为const int&,第二个重载推导为int。这些并不相等。因此,基于任何约束,模板的部分排序也不会考虑比另一个更专业。
| 归档时间: |
|
| 查看次数: |
135 次 |
| 最近记录: |