Вообще, неявные преобразования не допускаются при выводе аргументов, я могу думать о , выведенном из базы , как о допустимом.В выражении
B<int> combined1 = objA * objB;
предполагается, что найдены жизнеспособные перегрузки для objA * objB
, в том числе найденные ADL. Возможны следующие варианты:
template <typename T>
B<T> operator*(const A<T> &obj1, const B<T> &obj2) {...}
, но ничего не найдено, предоставленная вами перегрузкане является кандидатом, следовательно, вызов не удался, но если вы предоставите оператору явный аргумент шаблона, то не будет ничего выводить, и неявное преобразование через конструктор преобразования позволит выполнить вызов:
B<int> combined1 = operator*<int>(objA, objB);
Но я бы не стал этого делать, придерживайтесь актерского состава, лучше объясните намерения.