Использую 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?