struct X{};
template<class T>
decltype(X() == int()) f(T const&){ return true; }
int main(void) {
X x;
f(x);
}
爲什麼,只是爲什麼?沒有operator==
定義任何地方!爲什麼下面的代碼用MSVC++編譯?
我真的很想了解這裏發生了什麼,以提供有關MS Connect的詳細錯誤報告。我要瘋狂的旅程在休息室< C++>聊天室開始四處here ...
(注:無論GCC也不鏘接受這個代碼。)
哦,順便說一句和,加入私人X(int)
構造函數使編譯失敗:
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'
其他編譯器接受它嗎? –
@比利:沒有,補充說,信息。背景信息:我幾乎瘋了MSVC在C++聊天室中所做的事情,並在幾個小時後放棄了。 – Xeo
添加了一些背景信息。另外,請匿名downvoter請說出downvote的原因? – Xeo