Код: Выделить всё
#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
Хотя макрос __FILE__ является константой времени компиляции, но похоже, что если его передать в функцию constexpr, s будет рассматриваться как непостоянная (даже думал, что его можно сконструировать во время компиляции), но почему?
Но тогда, если s считается непостоянным выражением, я подумал return compile_time_trim(s); даже не будет оценен. Но ошибка говорит об обратном. Почему?
Кто-нибудь может подробно объяснить, что происходит?
Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/786 ... -evaluated