template<int x> struct A {
template<int y> struct B {};.
template<int y, int unused> struct C {};
};
template<int x> template<>
struct A<x>::B<x> {}; // error: enclosing class templates are not explicitly specialized
template<int x> template<int unused>
struct A<x>::C<x, unused> {}; // ok
Alors, pourquoi est explicite spécialisation d'un intérieur, classe imbriquée (ou une fonction) non autorisé, si l'extérieur de la classe n'est pas spécialisées trop? Assez étrange, je peux contourner ce comportement, si j'ai seulement partiellement spécialiser l'intérieur de la classe avec simplement l'ajout d'un mannequin paramètre du modèle. Rend les choses plus laide et la plus complexe, mais il fonctionne.
Je considère complète des spécialisations comme un sous-ensemble de spécialisations partielles - en particulier parce que vous pouvez exprimer toutes une spécialisation totale partielle avec l'ajout d'un paramètre fictif. Donc, cette homonymie entre partielles ou totales de la spécialisation n'a pas vraiment de sens pour moi.
Malheureusement, la personne à la comp.std.c++ osé répondre, alors je suis le mettre en place ici à nouveau avec un bounty.
Note: j'ai besoin de cette fonctionnalité pour les modèles de l'intérieur de la classe pour un jeu de l'extérieur de la classe et de la spécialisation de l'intérieur de paramètre ne dépend pas de l'extérieur paramètre du modèle.