Параметр шаблона в друзья - PullRequest
8 голосов
/ 28 июня 2011

В C ++ 03 следующее недопустимо, хотя некоторые компиляторы его поддерживают.

template <class T>
class X
{
    friend T;
};

Легализовано ли это в C ++ 11?(Извините, я не успел прочесть черновик, просто надеясь, что кто-то это знает)

Ответы [ 3 ]

12 голосов
/ 28 июня 2011

Из раздела §11.3, 3 в N3291:

template <typename T> class R {
  friend T;
};

R<C> rc; // class C is a friend of R<C>
R<int> Ri; // OK: "friend int;" is ignored

Так что это допустимо в C ++ 11.

1 голос
/ 28 июня 2011

Да, c ++ 0x позволяет параметру шаблона быть друзьями.

Что ж, я случайно вспомнил, что читал его в черновике раньше, но не смог найти ссылку.*

0 голосов
/ 01 июля 2011

Это недопустимо в простом C ++, но есть простой обходной путь

template <class T>
class X
{
    private:
        class Wrapper
        {
            public:
                typedef T Type;
        };
        friend class Wrapper::Type;
};
...