C ++ Primer (5. Aufl.): Ist "16.3 Überladen und Vorlagen" in all seinen "spezialisierteren" Beispielen falsch?

In Abschnitt 16.3 von C ++ Primer (5. Ausgabe) - Überladen und Vorlagen - wird das Verfahren für den Funktionsabgleich in Gegenwart von Instanziierungen von Kandidatenfunktionsvorlagen beschrieben.

Hier finden Sie die Deklaration für die in diesem Abschnitt verwendeten Funktionsvorlagen:

using std::string;
template <class T> string debug_rep(const T &); /* 1 */
template <class T> string debug_rep(T *);       /* 2 */
// definitions not relevant for the questions
Erstes Beispiel
string s("SO");
debug_rep(&s);

s wird dann gesagt, dass die erzeugten Instanziierungen somit sin

debug_rep(const string *&) (mitT gebunden anstring *)debug_rep(string *)

Q1 Ist es richtig für # 1? Sollte es nicht instanziierendebug_rep(string* const &) stattdessen

Zweites Beispiel
const string *sp = &s;
debug_rep(sp); //string literal type is const char[10]

s wird dann gesagt, dass die erzeugten Instanziierungen somit sin

debug_rep(const string *&) (mitT gebunden anconst string *)debug_rep(const string *)

Damit würden beide instanziierten Kandidaten eine exakte Übereinstimmung liefern, wobei die Auswahl auf der spezialisierteren Vorlage (-> # 2) erfolgt.

Q2.1 Ist es richtig für # 1? Sollte es nicht instanziierendebug_rep(const string* const &)?

Q2.2 Angenommen, die instanziierte Funktion ist die oben genannte. Können wir bestätigen, dass es sich nicht mehr um eine exakte Übereinstimmung handelt?

Drittes Beispiel
debug_rep("SO world!"); //string literal type is const char[10]

s wird dann gesagt, dass die erzeugten Instanziierungen somit sin

debug_rep(const T &) (mitT gebunden anchar[10])debug_rep(const string *)

Damit würden beide instanziierten Kandidaten eine exakte Übereinstimmung liefern, wobei die Auswahl auf der spezialisierteren Vorlage (-> # 2) erfolgt.

Q3.1 Wird der Typ für @ abgeleiteT richtig in # 1? Sollte es nicht @ seconst char[10] stattdessen

Q3.2 Angenommen, der abgeleitete Typ fürT ist eigentlich die oben genannte, können wir behaupten, dass es keine exakte Übereinstimmung mehr gibt?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage