MSVC 19.28拒绝以下带有错误消息的代码:C2668对重载函数的模棱两可的调用A::Foo
。它是编译器错误吗?它可以使用gcc,clang甚至msvc 19.10进行编译。自MSVC 19.14起失败,请参见此处
#include <iostream>
class A {
public:
template<typename T>
void Foo(int = {}) {
std::cout << "Hello World";
}
template<typename... T, typename... Args>
void Foo(Args&&... args) {
}
};
int main()
{
A a;
a.Foo<int>();
}
对于该调用Foo<int>()
,编译器可以推断出Foo<int>()
第一个模板和Foo<int>(void)
第二个模板。
...如果G具有尾随函数参数包,而F没有对应的参数,并且如果F没有尾随函数参数包,则F比G更专业。
这是一个决胜局,并且选择了第一个模板。
无法解决歧义性似乎是MSVC错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句