C++fonction modèle paramètre par défaut et l'inférence de type
Aucune de ces fonctions de modèle
template<typename T> void foo(T par = nullptr) {return;} //#1
template<typename T> void foo(T par = std::nullptr_t(nullptr)) {return;} //#2
template<typename T> void foo(T par = int(0)) {return;} //#3
rien laisser à l'appel sans argument suivant pour compilent:
foo();
bien appeler foo
avec n'importe quelle valeur fonctionne (par exemple foo(2)
).
nullptr
a un type spécifique, qui est std::nullptr_t
, donc je ne pensais pas que le paramètre par défaut nécessitait une qualification de type supplémentaire en # 1. Le type du paramètre par défaut est explicitement fourni dans # 2 et # 3, donc je ne pensais pas qu'il y avait une ambiguïté de type là-bas.
Quel est le problème ici? Y a-t-il un moyen approprié de faire les paramètres par défaut avec les fonctions du modèle?