Почему строковый литерал может быть неявно преобразован в char * только в определенном случае? [Дубликат]

На этот вопрос уже есть ответ здесь:

Почему передача строкового литерала в аргумент char * только иногда приводит к ошибке компилятора? 6 ответов
void f(char* p)
{}

int main()
{
    f("Hello"); // OK

    auto p = "Hello";

    f(p); // error C2664: 'void f(char *)' : cannot convert parameter 1 
          // from 'const char *' to 'char *'
} 

Код был скомпилирован с VC ++ ноябрь 2012 CTP.

§2.14.15 Строковые литералы, раздел 7

Узкий строковый литерал имеет тип «массив из n const char», где n - размер строки, как определено ниже, и имеет статическую продолжительность хранения.

Почемуf("Hello") ОК?

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

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