Я хотел бы сделать следующее:
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:
// ...
};
кажется, компилирует, но это корректно? У друзей и шаблонов есть очень неестественный синтаксис.
template<typename> friend class foo
это, однако, сделает все шаблоны друзьями друг другу. Но я думаю, это то, что вы хотите?