У меня есть шаблон структуры A<x> и B<x>, перегрузка оператора для A<x>+int и преобразование из B<x> в A<x>. Я хочу, чтобы B<x> преобразовывалось в A<x> при добавлении с int, поэтому я использовал объявление функции друга.
#include <iostream>
template<int x>
struct A{
int a;
};
template<int x>
struct B{
int b=3;
operator A<x>(){
return {b+10};
}
friend int operator+(A<x> a, int b);
};
template<int x>
int operator+(A<x> a, int b){
return a.a+b;
}
int main(){
std::cout<<(A<12>{9}+10)<<std::endl; // This works fine
std::cout<<(B<12>{9}+10)<<std::endl; // Error
return 0;
}
Теперь компоновщик жалуется, что 'operator+(A‹12>, int)' не определен. Может ли кто-нибудь сказать мне, что с этим не так?