• Что значит шаблон friend-функции внутри структуры?

    @MarkusD Куратор тега C++
    все время мелю чепуху :)
    По всем этим вопросам к прочтению предлагаю следующую книгу: Дэвид Вандевурд, Николаи М. Джосаттис: Шаблоны C++....

    Сходу можно сказать что объявление дружественности оператора лишнее - в заблуждение вводит, преимуществ не дает. Внешняя перегрузка конкретно этого оператора в дружественности не нуждается.
    Проверка тут: cpp.sh/73htm

    По поводу конструкций вида "template< typename >" у Вандервуда написано так: "Поскольку шаблонный параметр параметра шаблона далее не используется, его имя можно опустить".
    Это равнозначно объявлению функции вида "void foo( int32_t );". Неиспользуемые идентификаторы можно не писать, но это снижает культуру кода.

    template <class > friend std::ostream& operator<<(std::ostream& s, Vec2<t>& v);

    Параметр опущен потому что не используется. Вместо него используется шаблонный параметр "t" из "Vec2".
    Это нужно для того, чтобы для любого конкретного "t" у "Vec2" был всего один дружественный оператор - инстанцированный от все того же "t".
    Ответ написан
    Комментировать