Ошибка компиляции, вложенный шаблонный класс-друг
От: roofhasgone  
Дата: 11.09.09 20:52
Оценка:
Использую MS Visual Studio 2008 Pro.
Не компилируется код, эквивалентный следующему(всё лишнее убрано):

#include "stdafx.h"

template<typename T>
class Outer {
public:
        template<typename V>
        class Inner {};

        template<typename V>
        friend class Inner<V>;

};


int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}


То есть не получается сделать внутренний шаблонный класс(Inner) шаблонного класса(Outer) другом этого шаблонного класса(Outer).
Нужна именно такая дружба, то есть ВСЕ инстанцинации класса Outer<T>::Inner должны быть друзьями для Outer<T>.
Пробовал по-разному, ничего не выходит. В данном случае выдаются ошибки:

1>Compiling...

1>test.cpp
1>w:\test\test\test.cpp(13) : error C3772: 'Outer<T>::Inner<V>' : invalid friend template declaration
1> w:\test\test\test.cpp(15) : see reference to class template instantiation 'Outer<T>' being compiled

Самое странное, что эта конструкция компилируется на Borland C++ Builder 6 без ошибок и предупреждений.

Как можно сделать такое на MSVS9?
visual studio template nested class
Re: Ошибка компиляции, вложенный шаблонный класс-друг
От: l33thaxor  
Дата: 11.09.09 21:00
Оценка:
Здравствуйте, roofhasgone, Вы писали:

Попробуй так:
R>
R>template<typename T>
R>class Outer {
R>public:
R>        template<typename V>
R>        class Inner {};

R>        template<typename V>
R>        friend class Inner;  // removed <V>

R>};
R>
Re[2]: Ошибка компиляции, вложенный шаблонный класс-друг
От: roofhasgone  
Дата: 11.09.09 21:04
Оценка:
Здравствуйте, l33thaxor, Вы писали:

L>Здравствуйте, roofhasgone, Вы писали:


L>Попробуй так:

R>>
R>>template<typename T>
R>>class Outer {
R>>public:
R>>        template<typename V>
R>>        class Inner {};

R>>        template<typename V>
R>>        friend class Inner;  // removed <V>

R>>};
R>>

Спасибо, заработало!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.