Почему Visual Studio 2010 и Visual Studio 2012 не могут скомпилировать этот код?
Codepad.org, Xcode, gcc, LLVM, Clang все не имеют проблем, но Visual Studio укладывает кровать:
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