【发布时间】:2011-06-28 16:44:01
【问题描述】:
在 C++03 中,以下是非法的,尽管一些编译器支持它。
template <class T>
class X
{
friend T;
};
这在 C++11 中是否合法化? (抱歉,没时间自己看草稿,希望有人知道)
【问题讨论】:
标签: c++ templates c++11 friend
在 C++03 中,以下是非法的,尽管一些编译器支持它。
template <class T>
class X
{
friend T;
};
这在 C++11 中是否合法化? (抱歉,没时间自己看草稿,希望有人知道)
【问题讨论】:
标签: c++ templates c++11 friend
来自 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 中是合法的。
【讨论】:
friend int; 被忽略了:)
是的,c++0x 允许模板参数成为朋友。
好吧,我碰巧记得以前在草稿中读过它,但找不到参考资料。.无论如何@Praetorian 的回答是肯定的。
【讨论】:
在纯 C++ 中是非法的,但有一个简单的解决方法
template <class T>
class X
{
private:
class Wrapper
{
public:
typedef T Type;
};
friend class Wrapper::Type;
};
【讨论】:
friend T; GCC 无法识别,但 Clang 可以。