在研究问题的答案(基于this answer)时,我尝试执行以下操作:

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

friendly<string> howdy;

无法编译,并出现以下错误:



从我的好 friend Google那里了解到,这样做是为了避免意外地实例化friendly<int>,但是为什么在编译模板时会出现错误?实例化具有无效类型的模板时是否应该出错(例如我写了int f() { return T::foo(); })

最佳答案

该标准的第7.1.5.3节明确将其描述为格式错误的详细类型说明符的示例。

可以在here上找到有关该主题的讨论。

07-27 13:31