Кстати. Я понял, почему в constexpr функциях нельзя делать static constexpr переменные. Потому что если значение такой переменной зависит от параметра, то constexpr функция может возвращать разные значения для одних и тех же вызовов, если они будут сделаны в разных порядках. Например:
constexpr int f(int x) {
static constexpr int i = x;
return i;
}
Если вызвать сначала f(0) затем f(1), то получим 0, 0. А если сначала f(1), а потом f(0), то получим 1, 1. Что довольно неожиданно.
Неудобно, что это запрещает делать static constexpr переменные не зависящие от параметров, но тут вроде бы логично, что разница довольно тонкая.