请考虑以下代码:
template <typename T>
struct foo
{
template <typename S>
struct bar
{
template <typename> friend struct bar;
};
};
我希望所有的实例都成为any的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 错误: