Hoe declareer je een struct/class als vriend?

Ik wil het volgende doen:

template <typename T>
struct foo
{
    template <typename S>
    friend struct foo<S>;
private:
    // ...
};

maar mijn compiler (VC8) verslikt zich erin:

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

Ik zou graag alle mogelijke instanties van template struct foovrienden van foo<T>willen hebben voor alle T.

Hoe zorg ik ervoor dat dit werkt?

EDIT: dit

template <typename T>
struct foo
{
    template <typename>
    friend struct foo;
private:
    // ...
};

lijkt te compileren, maar is het juist? Vrienden en sjablonen hebben een zeer onnatuurlijke syntaxis.


Antwoord 1, autoriteit 100%

template<typename> friend class foo

dit maakt echter alle sjablonen vrienden van elkaar.
Maar ik denk dat dit is wat je wilt?

Other episodes