struct X{};
template<class T>
decltype(X() == int()) f(T const&){ return true; }
int main(void) {
X x;
f(x);
}
为什么,只是为什么?没有operator==
定义任何地方!
我真的想了解这里发生了什么,提供有关MS Connect的详细错误报告。我的疯狂之旅始于here休息室&lt; C ++&gt;聊天室...
(注意:GCC和Clang都不接受此代码。)
哦,顺便说一下,添加私有X(int)
ctor会导致编译失败:
struct X{
X(){}
private:
X(int);
};
template<class T>
decltype(X() == int()) f(T const&){ return true; }
int main(void) {
X x;
f(x);
}
输出:
1>src\main.cpp(12): error C2248: 'X::X' : cannot access private member declared in class 'X'
1> src\main.cpp(4) : see declaration of 'X::X'
1> src\main.cpp(1) : see declaration of 'X'
答案 0 :(得分:7)
您使用的是哪种版本的MS VC ++?
无论它有什么价值,VC ++ 11 Beta都会拒绝你的代码:
trash.cpp(8): error C2893: Failed to specialize function template ''unknown-type' f(const T &)'
With the following template arguments:
'X'
我不确定这是我称之为最有帮助或最有用的错误消息,但它 拒绝代码。
在这种情况下,我认为提交错误报告可能会很少(如果有的话)。我期望的响应基本上是:“已经在VC ++ 11中修复。尽可能升级。”