有人可以帮助我理解这是否是正确的行为.
考虑这个例子:
#include <iostream>
using namespace std;
template <typename T>
struct test {
};
template <typename T>
bool operator==(const test<T>& obj, const T* arr) {
return true;
}
template <typename T, size_t TN>
bool operator==(const test<T>& obj, const T (&arr)[TN]) {
return false;
}
int main() {
cout << ( test<char>() == "string" ) <<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
使用gcc 4.7.3,它可以很好地编译并按预期输出"0".
但是使用Visual Studio编译器会报告ambiguous error (C2593).
在这种情况下谁是对的,对此有什么standard看法?
谢谢.
使用gcc和clang的最新版本(即开发分支的最新负责人)也显示出歧义。我本以为采用数组的重载更好,但代码似乎不明确。不过,我还没有找到标准中的相关条款。