C++ MSVC-C2668对重载函数的不明确调用-是编译器错误吗?
MSVC 19.28拒绝以下代码并显示错误消息:C2668对重载函数的不明确调用C++ MSVC-C2668对重载函数的不明确调用-是编译器错误吗?,c++,visual-studio,visual-c++,cl,C++,Visual Studio,Visual C++,Cl,MSVC 19.28拒绝以下代码并显示错误消息:C2668对重载函数的不明确调用A::Foo。 这是一个编译器错误吗?它可以用gcc、clang甚至msvc 19.10编译。 它自MSVC 19.14以来失败,请参阅 #包括 甲级{ 公众: 模板 void Foo(int={}){ std::cout对于调用Foo()编译器可以为第一个模板推断Foo(),为第二个模板推断Foo(void) 发件人: …如果G有一个尾随函数参数包,而F没有相应的参数,并且如果F没有尾随函数参数包,则F比G更专业化
A::Foo
。
这是一个编译器错误吗?它可以用gcc、clang甚至msvc 19.10编译。
它自MSVC 19.14以来失败,请参阅
#包括
甲级{
公众:
模板
void Foo(int={}){
std::cout对于调用Foo()
编译器可以为第一个模板推断Foo()
,为第二个模板推断Foo(void)
发件人:
…如果G有一个尾随函数参数包,而F没有相应的参数,并且如果F没有尾随函数参数包,则F比G更专业化
这是一个平局断路器,并且选择了第一个模板
无法解决歧义似乎是MSVC的一个缺陷
#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>();
}