У меня есть шаблонный класс A
с внутренним классом B
. Я хочу иметь друга == оператор. Однако следующий код не компилируется. Это говорит, couldn't deduce template parameter ‘T’
#include <iostream>
template<typename T>
struct A
{
struct B
{
T b;
template<typename T2>
friend bool operator == (const typename A<T2>::B& b1, const typename A<T2>::B& b2);
};
B b;
};
template<typename T>
bool operator == (const typename A<T>::B& b1, const typename A<T>::B& b2)
{
return b1.b == b2.b;
}
int main() {
A<int>::B b1, b2;
b1.b = 3;
b2.b = 2;
std::cout << (b1 == b2) << std::endl;
return 0;
}
У меня должна быть версия друга, потому что, как ее называет один из алгоритмов STL, ==
не может быть найдено иначе, даже если у меня bool operator == (const B& b_) { return b == b_.b; }
Как решить эту проблему?