пожалуйста, обратите внимание на следующий код:
template <typename T>
struct foo
{
template <typename S>
struct bar
{
template <typename> friend struct bar;
};
};
Я бы хотел, чтобы все экземпляры foo<T>::bar
были друзьями foo<T>::bar<S>
для любого S
. Если bar
не является вложенным шаблоном, приведенный выше синтаксис работает просто отлично. Но когда я делаю например
int main()
{
foo<int> x;
}
MSVC8 (Visual C ++ 2005) не нравится:
1>.\main.cpp(11) : error C3855: 'foo<T>::bar': template parameter 'S' is incompatible with the declaration
1> .\main.cpp(12) : see reference to class template instantiation 'foo<T>::bar<S>' being compiled
1> .\main.cpp(14) : see reference to class template instantiation 'foo<T>' being compiled
Компилятор выдает мне те же ошибки, если я использую
template <typename> friend struct foo<T>::bar;
вместо этого. Как мне добиться того, чего я хочу?
РЕДАКТИРОВАТЬ: Я дважды проверил (здесь утро, и я не совсем проснулся), это, похоже, ошибка VC8 :