Мой вопрос немного связан с this one.
Я хочу перегрузить оператор << для некоторого класса, и я нашел две разные записи, которые работают обе: </p>
template <class T>
class A{
T t;
public:
A(T init) : t(init){}
friend ostream& operator<< <> (ostream &os, const A<T> &a); //need forward declaration
//template <class U> friend ostream& operator<< (ostream &os, const A<U> &a);
};
Я определяю одинаковые вещи с разными обозначениями? Или первая версия более ограничительна, в которой экземпляр (в данном случае только экземпляр с тем же T, что и мой класс A) << является другом A?