`consteval` влияет на то, как выражение в функции классифицируется/оценивается?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 `consteval` влияет на то, как выражение в функции классифицируется/оценивается?

Сообщение Anonymous »

У меня есть следующий код:

Код: Выделить всё

#include 
#include 
#include 

consteval const char* compile_time_trim(const std::string_view& s) noexcept{
return s.data() + s.find("/app/") + strlen("/app/");
}

constexpr const char* best_effort_trim(const std::string_view& s) noexcept{
if consteval {
return compile_time_trim(s);
}
else {
return s.data();
}
}

int main() {
std::cout _M_str; }
|                ~~~~~~^~~~~~
Compiler returned: 1
Однако, если я изменю constexpr const char* best_effort_trim( на consteval const char* best_effort_trim(, GCC не выдаст ошибки.
Хотя макрос __FILE__ является константой времени компиляции, но похоже, что если его передать в функцию constexpr, s будет рассматриваться как непостоянная (даже думал, что его можно сконструировать во время компиляции), но почему?
Но тогда, если s считается непостоянным выражением, я подумал return compile_time_trim(s); даже не будет оценен. Но ошибка говорит об обратном. Почему?
Кто-нибудь может подробно объяснить, что происходит?
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/786 ... -evaluated
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»