`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

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