функция constexpr, принимающая const char * - PullRequest
0 голосов
/ 13 февраля 2020

Я компилирую, используя MSV C v141 с /std:c++17.

constexpr const char* test(const char* foo) {
    return foo + 1;
}

constexpr const char* bc = test("abc");

, компилируется просто отлично, тогда как

constexpr const char* test(const char* foo) {
    constexpr auto bar = foo;
    return bar + 1;
}

constexpr const char* bc = test("abc");

Сбой:

ошибка C2131: выражение не оценивается как константа

сбой был вызван чтением переменной вне ее времени жизни

примечание: см. использование 'foo'

Это правильное поведение или ошибка в MSV C?

1 Ответ

5 голосов
/ 13 февраля 2020

Похоже, ожидаемое поведение для меня. Функция, объявленная с constexpr, означает, что она может быть оценена во время компиляции, но не обязательна. Таким образом, ваша функция также должна быть действительной при оценке во время выполнения. Это проблемная строка

constexpr auto bar = foo;

, поскольку она пытается создать объект constexpr из объекта, отличного от constexpr.

...