Функция друга С++ не определена?

У меня есть шаблон структуры 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)' не определен. Может ли кто-нибудь сказать мне, что с этим не так?


person eivour    schedule 17.08.2017    source источник
comment
отлично работает для меня   -  person Hariom Singh    schedule 17.08.2017
comment
@HariomSingh ты связал это?   -  person xaxxon    schedule 17.08.2017
comment
да даже получил результат 29 Программа завершилась с кодом выхода: 0   -  person Hariom Singh    schedule 17.08.2017
comment
Извините, я исправил проблему и выполнял .. вот почему работал   -  person Hariom Singh    schedule 17.08.2017
comment
Гах, почему так сложно найти обман для этого?   -  person Baum mit Augen    schedule 17.08.2017
comment
Теперь я понимаю, что не так, но какое решение? (объявление шаблона оператора друга не исправит... преобразование не работает)   -  person eivour    schedule 17.08.2017
comment
@Baum mit Augen, это не тот случай, так что это не совсем обман, здесь проблема, связанная с использованием иностранного оператора. Он не будет работать с оператором, определенным для другого типа. Это может работать, только если определено для обоих или если типы связаны   -  person Swift - Friday Pie    schedule 17.08.2017