Учебник по С ++ (5-е изд.): «16.3 Перегрузка и шаблоны» неправильны во всех «более специализированных» примерах?

Раздел 16.3 Учебника по C ++ (5-е издание) - Перегрузка и шаблоны - описывает процедуру сопоставления функций при наличии возможных экземпляров шаблонов функций.

Вот объявление для шаблонов функций, используемых в этом разделе:

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
Первый пример
string s("SO");
debug_rep(&s);

затем говорят, что сгенерированные экземпляры будут, таким образом:

debug_rep(const string *&) (сT связан сstring *)debug_rep(string *)

Q1 Это правильно для № 1? Не следует ли это создаватьdebug_rep(string* const &) вместо?

Второй пример
const string *sp = &s;
debug_rep(sp); //string literal type is const char[10]

затем говорят, что сгенерированные экземпляры будут, таким образом:

debug_rep(const string *&) (сT связан сconst string *)debug_rep(const string *)

Таким образом, оба экземпляра-кандидата предоставят точное совпадение, выбор будет сделан на более специализированном шаблоне (-> # 2)

В2.1 Это правильно для № 1? Не следует ли это создаватьdebug_rep(const string* const &)?

В2.2 Предполагая, что созданная функция - та, что выше, можем ли мы подтвердить, что она больше не является точным соответствием?

Третий пример
debug_rep("SO world!"); //string literal type is const char[10]

затем говорят, что сгенерированные экземпляры будут, таким образом:

debug_rep(const T &) (сT связан сchar[10])debug_rep(const string *)

Таким образом, оба экземпляра-кандидата предоставят точное совпадение, выбор будет сделан на более специализированном шаблоне (-> # 2)

В3.1 Тип выводится дляT правильно в # 1? Не должно ли это бытьconst char[10] вместо?

В3.2 Предполагая, что выведенный тип дляT на самом деле тот, что только что приведен выше, можем ли мы подтвердить, что это уже не точное совпадение?

Ответы на вопрос(2)

Ваш ответ на вопрос