Причина, по которой вы видите проблему, состоит в том, что передаваемые аргументы имеют тип char const *
(также может быть написано const char *
). В C ++ не существует какого-либо стандартного способа распечатать полное имя типа. Но есть способ проверить подобные вещи ..
Одна из проблем шаблонов заключается в том, что система будет расширять любые возможные шаблоны. И поэтому у вас будет таинственный код, работающий определенным образом, и вы не будете полностью уверены, почему. Один из способов, которым вы могли бы заставить компилятор точно сказать вам, в чем проблема в данном случае, это попытаться удалить шаблон:
#include <iostream>
#include <cstring>
using ::std::cout;
using ::std::strcmp;
char* max(char* a, char* b)
{
cout << "1 ..." << '\n'; // Don't use ::std::endl Use cerr if you need flushing.
return strcmp(a, b) > 0 ? a : b;
}
int main()
{
cout << max("Aladdin", "Jasmine") << '\n';
return 0;
}
Компилятор мог бы предупредить вас, что вы пытаетесь вызвать функцию, которая принимает неконстантные аргументы с константными аргументами, и вы бы точно поняли, в чем проблема.