Как объявить шаблонную структуру / класс своим другом?
Я хотел бы сделать следующее:
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
Я хотел бы иметь все возможные экземплярыtemplate struct foo
друзьяfoo<T>
для всехT
.
Как мне сделать эту работу?
РЕДАКТИРОВАТЬ: Это
template <typename T>
struct foo
{
template <typename>
friend struct foo;
private:
// ...
};
похоже компилируется, но правильно ли это? Друзья и шаблоны имеют очень неестественный синтаксис.