s'il vous plaît considérez le code suivant:ami Modèle et classes imbriquées
template <typename T>
struct foo
{
template <typename S>
struct bar
{
template <typename> friend struct bar;
};
};
J'aimerais tous les instanciations de foo<T>::bar
être amis de foo<T>::bar<S>
pour tout S
. Si bar
n'est pas un modèle imbriqué, la syntaxe ci-dessus fonctionne très bien. Mais quand je fais par exemple
int main()
{
foo<int> x;
}
MSVC8 (Visual C++ 2005) ne l'aime pas:
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
Le compilateur me donne les mêmes erreurs si j'utilise
template <typename> friend struct foo<T>::bar;
place . Comment puis-je réaliser ce que je veux?
EDIT: Je revérifié (c'est le matin, et je ne suis pas vraiment éveillé), cela semble être un VC8 bug:
Semble fonctionner sur ma machine. Même compilateur cependant. – DumbCoder
J'ai copié le code exact ci-dessus, non inclus, et j'ai copié collé les messages d'erreur. –