struct X{};
template<class T>
decltype(X() == int()) f(T const&){ return true; }
int main(void) {
X x;
f(x);
}
Warum, nur warum? Es gibt keine operator==
definierte überall!Warum kompiliert der folgende Code mit MSVC++?
Ich möchte wirklich verstehen, was hier vor sich geht, um einen detaillierten Fehlerbericht zu MS Connect zu liefern. Meine Reise in dem Wahnsinn begann um here in der Lounge < C++> Chat-Raum ...
(Anmerkung: Weder GCC noch Clang diesen Code akzeptieren.)
Oh, und btw, das Hinzufügen eines privater X(int)
Ctor bewirkt, dass die Kompilation zum scheitern verurteilt:
struct X{
X(){}
private:
X(int);
};
template<class T>
decltype(X() == int()) f(T const&){ return true; }
int main(void) {
X x;
f(x);
}
Ausgang:
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'
Haben andere Compiler es akzeptiert? –
@Billy: Nein, diese Info hinzugefügt. Hintergrundinfo: Ich bin fast verrückt geworden, was MSVC hier im C++ Chatroom macht und gab nach ein paar Stunden auf. – Xeo
Ein paar Hintergrundinformationen hinzugefügt. Könnte der anonyme Downvoter auch den Grund für den Downvote nennen? – Xeo