Если хочется и плюсов и VLA, то последний можно заменить на new[].
Код использующий X не изменится, только удалять его теперь придётся
вручную, через delete[] {
auto X = new double[2 * degree + 1];
...
X[1] = 42.0;
delete[] X;
}
В С этот VLA примерно так и реализуют, выделяют память из кучи (malloc) и освобождают (free) когда станет не нужен.