У меня проблемы с перегрузкой оператора ==, разные ошибки компилятора с использованием VC++ (2015) и g ++ 5.4.0 (-std == C++ 14). Вот код (это только экстракт более сложной ситуации в моей реальной базе кода):Проблемы с перегрузкой оператора == подкатегория шаблона
#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;
}
я не добавлять сообщения об ошибках, потому что у меня немецкая версия VC++ и г ошибки ++ по многим линиям.
VC++ дает сообщение об ошибке (e). Я не понимаю, почему, потому что вектор <> :: operator ==, кажется, вызывает std :: equal внутри и (d) компилирует штраф. Почему это не удается?
g ++ не может принять мой внешний оператор ==(), поэтому полностью не удается скомпилировать этот короткий код. Я понятия не имею, как написать внешний оператор ==() для A <T> :: B, который работает с обоими компиляторами.
Я еще не пробовал clang.
Большое спасибо.
«У меня есть немецкая версия VC++ и ошибки g ++ на многих строках». Английские обычно не намного лучше. – user4581301