web-dev-qa-db-fra.com

Comment déclarer un struct / classe basé sur un modèle comme ami?

Je voudrais faire ce qui suit:

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

private:
    // ...
};

mais mon compilateur (VC8) s'étouffe dessus:

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

J'aimerais avoir toutes les instanciations possibles de template struct foo les amis de foo<T> pour tous T.

Comment faire pour que ça marche?

EDIT: Ce

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

private:
    // ...
};

semble compiler, mais est-ce correct? Les amis et les modèles ont une syntaxe très peu naturelle.

54
Alexandre C.
template<typename> friend class foo

cela rendra cependant tous les modèles amis entre eux. Mais je pense que c'est ce que tu veux?

84
Anycorn