Рассмотрим следующий код:
constexpr unsigned f(unsigned x)
{
while (x & 1) x *= 3;
return x;
}
int main()
{
char a[f(2)];
char b[f(1)];
}
В случае, если это не очевидно: для нечетных целых чисел x
функция f
никогда не заканчивается.
Когда я компилирую вышеуказанную программу с clang on coliru, b
представляется VLA, но не a
:
warning: variable length arrays are a C99 feature [-Wvla-extension]
char b[f(1)];
Существует ли определенный предел, по которому компилятор решает прекратить оценку постоянного выражения? Или было бы прекрасно, если бы соответствующий компилятор перешел в бесконечный цикл? Получает ли f(1)
UB?