Проблема в том, что intA
является зависимым именем. Шаблоны не могут быть выведены из зависимых имен. См. Например: Зависимые типы: сбой вывода аргумента шаблона .
Вам также не хватает ключевого слова typename
.
Вы можете явно указать тип оператора:
template <typename T1, typename T2>
struct A{ };
template<typename _T>
struct alias { typedef A<int,_T> intA; };
struct B
{
template <typename T> B& operator=(const typename alias<T>::intA& _arg) { };
};
int main()
{
A<int,int> a;
B b;
b.operator=<int>(a);
return 0;
}
или у вас может быть определенный параметр, не зависящий от имени, с использованием шаблонного псевдонима (с функцией или без нее):
template <typename T1, typename T2>
struct A{ };
template<class T>
using alias_int = A<int, T>;
struct alias
{
template<class T>
using intA = A<int, T>;
};
struct B
{
template <typename T> B& operator=(const alias_int<T>& _arg) { };
};
struct C
{
template <typename T> C& operator=(const alias::intA<T>& _arg) { };
};
int main()
{
A<int,int> a;
B b;
C c;
b = a;
c = a;
return 0;
}