VisualStudio2010およびVisualStudio2012がこのコードのコンパイルに失敗するのはなぜですか?
Codepad.org、Xcode、gcc、LLVM、Clangはすべて問題ありませんが、VisualStudioがベッドをうんちします。
struct S {
template <class T> inline operator T () const { return T (); }
};
int main () {
// NOTE: "S()" denotes construction in these examples
struct F {
void operator() (bool) { }
static void toint (int) { }
static void tostr (char const*) { }
};
bool b1 = S (); // Okay
bool b2 (S ()); // Okay
F () (S ()); // Okay
F::toint (S ());// Okay
F::tostr (S ());// Okay
S () || false; // Error: error C2676: binary '||' : 'vf::S' does
// not define this operator or a conversion to a type
// acceptable to the predefined operator
return 0;
}
キーワードを追加してexplicit
も、gccやclangの内容は変わりません。生成されるエラーメッセージは次のとおりです。
error C2676: binary '||' : 'S' does not define this operator or a
conversion to a type acceptable to the predefined operator