在C ++ 03中,以下是非法的,尽管有些编译器支持它。
template <class T>
class X
{
friend T;
};
这是否已在C ++ 11中合法化? (抱歉,我没有时间自己阅读草稿,希望有人知道这一点)
答案 0 :(得分:12)
从N3291的第11.3节,第3节开始:
template <typename T> class R {
friend T;
};
R<C> rc; // class C is a friend of R<C>
R<int> Ri; // OK: "friend int;" is ignored
所以它在C ++ 11中是合法的。
答案 1 :(得分:1)
是c ++ 0x允许模板参数成为朋友。
好吧,我碰巧记得以前在选秀中读过它但找不到参考资料。所以@Praetorian的回答都是钉在了它上面。
答案 2 :(得分:0)
在普通的C ++中它是非法的,但有一个简单的解决方法
template <class T>
class X
{
private:
class Wrapper
{
public:
typedef T Type;
};
friend class Wrapper::Type;
};