次のコードを検討してください。
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のバグのようです: