Рассмотрим следующий код:
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 на coliru, b
кажется VLA, но не a
:
warning: variable length arrays are a C99 feature [-Wvla-extension]
char b[f(1)];
Существует ли четко определенный предел, при котором компилятор решает прекратить вычисление константного выражения? Или было бы совершенно нормально, если бы соответствующий компилятор вошел в бесконечный цикл? f(1)
дает UB?