В C++17 этот код недопустим:
constexpr int foo(int i) {
return std::integral_constant::value;
}
Это потому, что даже если foo может быть вычислено во время компиляции, компилятору все равно необходимо создать инструкции для его выполнения во время выполнения, что делает создание экземпляра шаблона невозможным.
В C++20 у нас будут константные функции, которые необходимо оценивать во время компиляции, поэтому ограничение времени выполнения должно быть удалено. Означает ли это, что этот код будет легальным?
consteval int foo(int i) {
return std::integral_constant::value;
}
Подробнее здесь: https://stackoverflow.com/questions/561 ... on-argumen