Malgré les intentions de la proposition P0091 : Déduction d'argument de modèle pour les modèles de classe visant à aligner le comportement des modèles de fonctions et de classes, une déduction partielle pour les modèles de classe demeure irréalisable.
Considérez le modèle de classe :
template <std::size_t S, typename T> struct test { static constexpr auto size = S; using type_t = T; test(type_t (&input)[size]) : data(input) {} type_t (&data)[size]{}; };
Lors de l'utilisation d'une fonction d'assistance pour faciliter l'utilisation :
template <std::size_t S, typename T> test<S, T> helper(T (&input)[S]) { return input; }
Code tel que :
int buffer[5]; auto a = helper<5, int>(buffer); // No deduction auto b = helper<5>(buffer); // Type deduced: FAILS auto c = helper(buffer); // Type and size deduced
compile avec succès. Cependant, dans les versions plus récentes du compilateur, la déduction partielle (c'est-à-dire auto b = helper<5>(buffer);) échoue, ce qui suggère que la déduction partielle des arguments du modèle de classe n'est en effet pas prise en charge.
Cette limitation découle de préoccupations soulevé concernant une confusion potentielle dans des cas tels que :
// Deduced as tuple<int, string, float> // but tuple<int> is also a valid type! tuple<int> t(42, "waldo", 2.0f);
Par conséquent, alors que la proposition visait initialement à unifier le comportement de déduction, la déduction partielle pour les modèles de classe reste irréalisable en raison de problèmes d'ambiguïté potentiels.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!