C++ 03では、一部のコンパイラでサポートされていますが、次は不正です。テンプレートパラメータを友だちとして
template <class T>
class X
{
friend T;
};
これはC++ 11で合法化されていますか?
C++ 03では、一部のコンパイラでサポートされていますが、次は不正です。テンプレートパラメータを友だちとして
template <class T>
class X
{
friend T;
};
これはC++ 11で合法化されていますか?
、N3291で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の答えはそれを釘付け。セクション§11.3から
[タグ:友人]これは、通常のC++では違法ですが、簡単な回避策
template <class T>
class X
{
private:
class Wrapper
{
public:
typedef T Type;
};
friend class Wrapper::Type;
};
があるC++のために正しいです。 – user7116
[friends](http://www.stackoverflow.com/questions/tagged/friends)はFacebookのためのものです。 –
@ケン:テレビ番組ではないとうれしいxD –