struct X{};
template<class T>
decltype(X() == int()) f(T const&){ return true; }
int main(void) {
X x;
f(x);
}
¿Por qué, solo por qué? No hay operator==
definido en ninguna parte!¿Por qué compila el siguiente código con MSVC++?
Realmente quiero entender lo que está sucediendo aquí, para proporcionar un informe detallado de errores en MS Connect. Mi viaje a la locura comenzó alrededor here en el Salón < C++> sala de chat ...
(Nota: Ni GCC ni Clang aceptar este código.)
Ah, y por cierto, la adición de una privada X(int)
ctor hace que el compilación falle:
struct X{
X(){}
private:
X(int);
};
template<class T>
decltype(X() == int()) f(T const&){ return true; }
int main(void) {
X x;
f(x);
}
salida:
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'
¿Lo aceptan otros compiladores? –
@Billy: No, agregó esa información. Información general: casi me vuelvo loco por lo que MSVC hace aquí en la sala de chat de C++ y me rindo luego de un par de horas. – Xeo
Agregó un poco de información de fondo. Además, ¿podría el infractor anónimo expresar el motivo del voto a la baja? – Xeo