Подтвердить что ты не робот

Constexpr и предупреждение о недопустимом преобразовании

Я пишу функцию как часть эксперимента с Boost.Interprocess. В функции я присваиваю строковый литерал переменной, объявленной constexpr char*. Когда я это делаю, я получаю:

warning: deprecated conversion from string constant to char* [-Wwrite-strings].

Мое понимание constexpr заключается в том, что в объявлении переменной он ведет себя так, как если бы была объявлена ​​переменная const, но с добавленной оговоркой, что переменная должна быть инициализирована, и что инициализация должна быть с константным выражением.

При таком понимании я ожидаю, что constexpr char* будет вести себя как const char*, и поэтому не выдаст предупреждение. Мне не хватает чего-то о том, как работает constexpr?

Я компилирую с GCC 4.6.0 20110306, используя -std = С++ 0x.

Было бы полезно оценить любые аргументы в пользу выдачи предупреждения. Спасибо!

4b9b3361

Ответ 1

const из constexpr сделает вашу переменную char* const.

У вас все еще есть проблема, что строковый литерал const char и преобразование его адреса в char* разрешено, но устарело.

Ответ 2

Для другого решения:

Вместо

constexpr char* foo = "bar";

Вы можете сделать -

constexpr char foo[] = "bar";

Это также избавит вас от предупреждения.