web-dev-qa-db-ja.com

テンプレート化された構造体/クラスをフレンドとして宣言する方法は?

次のことを行いたいのですが。

template <typename T>
struct foo
{
    template <typename S>
    friend struct foo<S>;

private:
    // ...
};

しかし、私のコンパイラ(VC8)はそれを窒息させます:

error C3857: 'foo<T>': multiple template parameter lists are not allowed

すべてのTに対して、template struct foofoo<T>の友達の可能なすべてのインスタンス化をしたいのですが。

これを機能させるにはどうすればよいですか?

編集:これ

template <typename T>
struct foo
{
    template <typename>
    friend struct foo;

private:
    // ...
};

コンパイルされているようですが、正しいですか?フレンドとテンプレートの構文は非常に不自然です。

54
Alexandre C.
template<typename> friend class foo

ただし、これにより、すべてのテンプレートが互いに友達になります。しかし、私はこれがあなたが望むものだと思いますか?

84
Anycorn