Ich habe Probleme beim Überladen von Operator ==, verschiedene Compilerfehler mit VC++ (2015) und g ++ 5.4.0 (--std == C++ 14). Hier ist der Code (dies ist nur ein Auszug aus einer komplexeren Situation in meiner realen Code-Basis):Probleme beim Überladen von Operator == der Vorlage Sub-Klasse
#include <vector>
template<typename T>
struct A {
struct B {
std::vector<T> _elements;
// Internal cmp op.
bool operator==(const B &other) {
return _elements == other._elements;
}
};
std::vector<B> _entries;
};
// External cmp op.
template<typename T>
inline bool operator==(typename const A<T>::B &l, typename const A<T>::B & r) {
return l._elements == r._elements;
}
int main() {
A<int>::B b0, b1;
b0.operator==(b1); // a
operator==<int>(b0, b1); // b
b0 == b1; // c
std::vector<A<int>::B> v0, v1;
std::equal(v0.begin(), v0.end(), v1.begin()); // d
v0 == v1; // e
return 0;
}
ich nicht die Fehlermeldungen hinzufügen, weil ich die Deutsch-Version von VC habe ++ und die g ++ Fehler Spannweite über viele Zeilen.
VC++ gibt einen Fehler an (e). Ich verstehe nicht warum, denn Vektor <> :: operator == scheint std :: equally intern aufzurufen und (d) kompiliert fein. Warum scheitert das?
g ++ akzeptiert meinen externen Operator ==() nicht, so kompiliert vollständig diesen kurzen Code nicht. Ich habe keine Ahnung, wie man einen externen Operator ==() für A <T> :: B schreibt, der mit beiden Compilern funktioniert.
Ich habe noch nicht geklingelt.
Vielen Dank.
"Ich habe die deutsche Version von VC++ und die g ++ Fehler erstrecken sich über viele Zeilen." Englische sind normalerweise nicht so viel besser. – user4581301