模板参数作为朋友

时间:2011-06-28 16:44:02

标签: c++ templates c++11 friend

在C ++ 03中,以下是非法的,尽管有些编译器支持它。

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

这是否已在C ++ 11中合法化? (抱歉,我没有时间自己阅读草稿,希望有人知道这一点)

3 个答案:

答案 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;
};