請考慮下面的代碼:模板的朋友和嵌套類
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;
,而不是編譯器給了我同樣的錯誤。我怎樣才能達到我想要的?
編輯:我DOUBLE(它的上午在這裏,我真的不清醒)檢查,這似乎是一個VC8 bug:
似乎在我的機器上工作。儘管如此編譯器。 – DumbCoder 2010-07-21 09:09:57
我複製粘貼上面的確切代碼,不包括,我複製粘貼錯誤消息。 – 2010-07-21 09:11:18