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)
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'
他のコンパイラはそれを受け入れますか? –
@Billy:いいえ、その情報を追加しました。背景情報:私はMSVCがC++のチャットルームで何をしているのか、頭がおかしくなり、数時間後にあきらめました。 – Xeo
背景情報を少し追加しました。また、匿名のdownvoterはdownvoteの理由を声を出してください? – Xeo