Ошибка компиляции, вложенный шаблонный класс-друг
От: 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.