Почему затухание указателя имеет приоритет над выведенным шаблоном?

Допустим, я пишу функцию для печати длины строки:

template <size_t N>
void foo(const char (&s)[N]) {
    std::cout << "array, size=" << N-1 << std::endl;
}

foo("hello") // prints array, size=5

Теперь я хочу расширитьfoo поддерживатьне-arrays:

void foo(const char* s) {
    std::cout << "raw, size=" << strlen(s) << std::endl;
}

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

foo("hello") // now prints raw, size=5

Зачем? Разве это не потребует преобразования массива в указатель, тогда как шаблон будет точно соответствовать? Есть ли способ убедиться, что моя функция массива вызывается?

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

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