Здравствуйте, sergii.p, Вы писали:
SP>так вот беда как раз в том, что никаких гарантий constexpr не даёт. Это только подсказка компилятору. Часто выбешивает, что надо писать тесты на то, что функция может быть вызвана в compile_time.
Не совсем понятно о чем именно речь. А можно пример кода?
А вообще:
constexpr size_t fac(size_t n) // спецификатор constexpr гарантирует, что функция вычислится в compile-time ЕСЛИ её вызывают в compile-time контексте
{
if (n == 0) return 1;
return n * fac(n - 1);
}
int main() {
auto r1 = fac(5); // здесь никаких гарантий compile-time выполнения нет. Оптимизатор возможно заоптимизирует, а возможно и нет.
constexpr auto r2 = fac(5); // здесь гарантируется, что переменная r2 будет вычислена на этапе компиляции
int arr1[fac(5)]; // размеры массивов будут вычислены на этапе компиляции
int arr2[r2];
}