Рассмотрим следующую программу:
#include <iostream>
#include <type_traits>
constexpr int f() {
if (std::is_constant_evaluated())
return -1;
else return 1;
}
int main() {
int const i = f();
std::cout << i;
}
It печатает -1
при запуске (wandbox).
Однако, если я сделаю функцию throw
при оценке во время компиляции ::
#include <iostream>
#include <type_traits>
constexpr int f() {
if (std::is_constant_evaluated())
throw -1; // <----------------------- Changed line
else return 1;
}
int main() {
int const i = f();
std::cout << i;
}
он хорошо компилируется и выдает 1 (wandbox). Почему я не получил ошибку компиляции?