При поиске ответа на вопрос (на основе этого ответа ) я пытался сделать следующее:
template <class T>
class friendly {
friend class T;
};
friendly<string> howdy;
Это не компилируется со следующей ошибкой:
ошибка: параметр шаблона "T" нельзя использовать в
разработанный спецификатор типа
друг класс Т;
Из того, что я могу понять от моего хорошего друга Google, это так, что я не буду случайно пытаться создать экземпляр friendly<int>
, но почему это должно быть ошибкой при компиляции шаблона? Разве это не должно быть ошибкой при создании экземпляра шаблона с недопустимым типом (например, если бы я написал int f() { return T::foo(); }
)