How to declare a templated struct/class as a friend?
C++TemplatesFriendC++ Problem Overview
I'd like to do the following:
template <typename T>
struct foo
{
template <typename S>
friend struct foo<S>;
private:
// ...
};
but my compiler (VC8) chokes on it:
error C3857: 'foo<T>': multiple template parameter lists are not allowed
I'd like to have all possible instantiations of template struct foo
friends of foo<T>
for all T
.
How do I make this work ?
EDIT: This
template <typename T>
struct foo
{
template <typename>
friend struct foo;
private:
// ...
};
seems to compile, but is it correct ? Friends and templates have very unnatural syntax.
C++ Solutions
Solution 1 - C++
template<typename> friend class foo
this will however make all templates friends to each other. But I think this is what you want?