Quelqu’un peut-il dire s’il vous plaît, si ci-dessous est légal c ++ ou non?
template class c {};
// spécialisation partielle
template class c < s*, s* & (*fn)(s**) {};
Erreur g ++ (4.2.4): un appel de fonction ne peut pas apparaître dans une erreur d’expression constante: l’argument de modèle 2 n’est pas valide.
Bien que cela fonctionne pour une spécialisation explicite
int & func ( int * ) { return 0; } template class c class c {};
je pense que vous voulez dire
template < typename s , s & (*fn) ( s * ) > class c {}; // partial specialization template < typename s , s & (*fn) ( s * ) > class c < s*, fn > {};