Как объявить шаблонную структуру/класс как друг?

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

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:
    // ...
};

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

54
задан Lukas Kalinski 29 March 2018 в 16:14
поделиться