C ++ FAQ предлагает руководство по написанию объявлений шаблонов друзей. Однако у меня проблема, когда один из аргументов является вложенной структурой класса шаблона, например:
template<typename T>
class MyClass;
template<typename T> QDataStream &operator<<(QDataStream &stream, const typename MyClass<T>::Node &node);
Ни одна из этих версий не работает:
template<typename T>
class MyClass
{
private:
struct Node {};
friend QDataStream &operator<< <>(QDataStream &stream, const Node &node);
friend QDataStream &operator<< <>(QDataStream &stream, const MyClass::Node &node);
friend QDataStream &operator<< <>(QDataStream &stream, const MyClass::Node &node);
friend QDataStream &operator<< <>(QDataStream &stream, const typename MyClass<T>::Node &node);
friend QDataStream &operator<< <>(QDataStream &stream, const typename MyClass::Node &node);
};
template<typename T>
QDataStream &operator<<(QDataStream &stream, const typename MyClass<T>::Node &node)
{
return stream;
}
Приведенная ошибка (по MSVC 2017):
error: C2672: '<<': no matching overloaded function found
Каким будет правильный синтаксис для написания этого?