Рассмотрим следующую программу:
#include <iostream>
template<typename... Params_t>
constexpr int constexprValue(Params_t...) { return 5; }
int main()
{
const bool flag = true;
if constexpr(flag)
{
constexpr int value = constexprValue(1, 2, 3);
std::cout << value << "\n";
}
}
Это компилируется и работает нормально. Однако, если flag
изменяется на false
, то clang (Apple LLVM версия 10.0.0 (clang-1000.10.44.4)) выдает ошибку компилятора:
error: constexpr variable 'value' must be initialized by a constant expression
undefined function 'constexprValue<int, int, int>' cannot be used in a constant expression
Это ошибка в Clang?