Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 编译器在为未定义函数选择正确重载方面的差异_C++_Overloading - Fatal编程技术网

C++ 编译器在为未定义函数选择正确重载方面的差异

C++ 编译器在为未定义函数选择正确重载方面的差异,c++,overloading,C++,Overloading,让我们看看下面的代码: //template <typename ... A> //void foo(char a, A ... args); template <typename T> void P(T x) { std::cout << x << ' '; } void foo(char a) { P(3); P(a); } template <typename ... A> void foo(int a, A ... arg

让我们看看下面的代码:

//template <typename ... A>
//void foo(char a, A ... args);

template <typename T> void P(T x) { std::cout << x << ' '; }

void foo(char a) { P(3); P(a); }

template <typename ... A>
void foo(int a, A ... args)
{
    foo(args...);
    P(a);
}

template <typename ... A>
void foo(char a, A ... args)
{
    P(a);
    foo(args...);
}

int main()
{
    foo('1', '2', 48, '4', '5');
}
//模板
//void foo(字符a、a…args);
模板void P(T x){std::cout

MSVC无法按照标准的规定为模板实现。此编译器错误地将所有名称解析延迟到模板实例化点


其他编译器在模板定义点正确解析非依赖名称。这就是您观察到的差异的原因。在定义点,第二个
foo
模板是不可见的,因此符合条件的编译器无法使用它。但在实例化点,它是可见的,MSVC很高兴地找到了它。

这是一个w这是MSVC的一个已知问题。它不实现模板的两阶段查找。如果使用常规函数而不是模板,则应该没有区别。@n.m:答案:↓↓↓↓↓↓对不起,哪边?↛ ↜ ↬ 我迷路了!