Страницы

Поиск по вопросам

четверг, 2 января 2020 г.

Дружественный шаблонный класс

#cpp


Почему gcc выдаёт ошибку?


  [Error] specialization of 'template class A' must appear at namespace scope


template
class A
{
    template
    friend class A;
};

    


Ответы

Ответ 1



В С++ нет возможности использования частичной специализации для того, чтобы "очертить" только какое-то подмножество специализаций шаблона в качестве друзей. 14.5.4 Friends 8 Friend declarations shall not declare partial specializations. [ Example: template class A { }; class X { template friend class A; // error }; —end example ] То есть другом может быть либо шаблон (со всеми его специализациями), либо конкретная специализация (т.е полная специализация) шаблона.

Ответ 2



Уберите : template class A { template friend class A; }; Update: ну... опять же - template friend class A; Впрочем, не очень уверен, что сработает именно специализация.

Комментариев нет:

Отправить комментарий