У меня есть следующее определение.
using namespace std;
template <typename T>
void foo(const T &s) {
cout << 1;
}
template <typename T>
void foo(const T *s) {
cout << 2;
}
int main(int argc, const char * argv[]) {
char str[] = "ss";
char *s = str;
foo(s);
return 0;
}
Затем он выдает
1
По моему мнению, обе версии должны пройти преобразование const. Тогда void foo(const T *s)
более специализирован и должен быть вызван. Однако компилятор выбрал void foo(const T& s)
. Какое объяснение?