Почему я не могу подружиться с параметром шаблона?

При исследовании ответа на вопрос (на основе этого ответа ) я попытался сделать следующее:

template <class T>
class friendly {
    friend class T;
};

friendly<string> howdy;

Это не скомпилируется со следующей ошибкой:

error: параметр шаблона «T» не может использоваться в специфицированном спецификаторе типа <int> class T;

Из того, что я могу понять из моего хорошего int f () {return T :: foo (); } Google это так, что я не буду случайно пытаться создать экземпляр, friendно почему это должно быть ошибкой при компиляции шаблона? Должна ли быть ошибка при создании шаблона с недопустимым типом (например, если бы я написал )template <typename T> class R { friend T; }; R<C> rc; // class C is a friend of R<C> R<int> ri; // OK: a€?friend int;a€? is ignored

c++,templates,friend,

6

Ответов: 2


3

В разделе 7.1.5.3 стандарта явным образом описывается это как пример неформального подробного спецификатора типа.

Обсуждение этого вопроса можно найти здесь .


2 принят

Немного больше googleling поднял Extended friendDeclarations (PDF) для C ++ 0x .

Этот документ содержит следующее:

friend

Это еще больше, чем то, что я думал (игнорируя незаконные friendзамедление, а не неудачу во время создания экземпляра). Поэтому я думаю, что ответ заключается в том, что нет веской причины, и он исправляется.

C ++, шаблоны, друг,
Похожие вопросы
Яндекс.Метрика