请考虑以下代码:
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;
}
MVC8(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 bug
: