Насколько я понимаю, поскольку "p_[0] != 'a'
" может быть вычислено во время компиляции (как показано в code1), поэтому constexpr if (p_[0] != 'a')
должно быть допустимым утверждением, которое может быть оценено во время компиляции.
p_[0] != 'a'
можно вычислять во время компиляции, но также можно оценивать во время выполнения.
Проблема в том, что if constexpr
test должен быть оценен во время компиляции. И это невозможно, когда foo()
выполняется во время выполнения или когда соответствующий объект Test
инициализируется во время выполнения.
Итак, ошибка.
Или лучше: ошибка, если пишешь правильно
if constexpr (p_[0] != 'a')
В вашем случае порядок между if
и constexpr
также неверен.