Многопараметрический шаблон не очень хорошо играет с объявлением друга - PullRequest
1 голос
/ 11 февраля 2012

Следующий фрагмент прекрасно работает как в Visual Studio, так и в g ++.

template<typename T> class BST;

template<typename T>
class BSTNode 
{
    friend class BST<T>;
...

, хотя этот фрагмент отлично работает в VS, но не в g ++

template<typename K, typename V> class Map;

template<typename K, typename V>
class MapPair
{

    friend class Map<typename K, typename V>;
     ...

Что не так с этим кодом?Ошибки, которые я получаю, бесполезны, но вот они

error: wrong number of template arguments (1, should be 2)
error: provided for ‘template<class K, class V> struct Map’
error: friend declaration does not name a class or function

Есть идеи?

1 Ответ

1 голос
/ 11 февраля 2012

Скажите friend class Map<K, V>;.typename может использоваться только для определения зависимых имен, которые K и V не являются.

...