struct X{};
template<class T>
decltype(X() == int()) f(T const&){ return true; }
int main(void) {
X x;
f(x);
}
为什么,只是为什么?任何地方都没有operator==
定义!
我真的很想了解这里发生了什么,以提供有关 MS Connect 的详细错误报告。我的疯狂之旅始于Lounge<C++> 聊天室……
(注意: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'