模板的朋友

我想要做以下事情:

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 foo朋友foo<T>

我该如何做这项工作?

编辑:这个

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

似乎编译,但它是正确的? 朋友和模板有非常不自然的语法。

 template<typename> friend class foo 

这将使所有的模板成为彼此的朋友。 但我认为这是你想要的?