Подтвердить что ты не робот

Шаблонный друг

Я хотел бы сделать следующее:

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.

Как мне сделать эту работу?

EDIT: Этот

template <typename T>
struct foo
{
    template <typename>
    friend struct foo;

private:
    // ...
};

похоже, компилируется, но верно ли это? Друзья и шаблоны имеют очень неестественный синтаксис.

4b9b3361

Ответ 1

template<typename> friend class foo

это, однако, сделает все шаблоны друзьями друг для друга. Но я думаю, что это то, что вы хотите?