Por que o C ++ 11 constexpr é tão restritivo?

Como você provavelmente sabe, o C ++ 11 apresenta oconstexpr palavra-chave.

@ C ++ 11 introduziu a palavra-chave constexpr, que permite ao usuário garantir que uma função ou construtor de objetos seja uma constante em tempo de compilação. [...] Isso permite ao compilador entender e verificar se [nome da função] é uma constante em tempo de compilação.

Minha pergunta é por que existem restrições tão estritas na forma das funções que podem ser declaradas. Entendo o desejo de garantir que a função seja pura, mas considere isso:

O uso do constexpr em uma função impõe algumas limitações sobre o que essa função pode fazer. Primeiro, a função deve ter um tipo de retorno não nulo. Segundo, o corpo da função não pode declarar variáveis ou definir novos tipos. Terceiro, o corpo pode conter apenas declarações, declarações nulas e uma única declaração de retorno. Deve haver valores de argumento que, após a substituição do argumento, a expressão na instrução return produza uma expressão constant

Isso significa que essa função pura é ilegal:

constexpr int maybeInCppC1Y(int a, int b)
{
    if (a>0)
        return a+b;
    else
        return a-b;
  //can be written as   return  (a>0) ? (a+b):(a-b); but that isnt the point
}

Além disso, você não pode definir variáveis locais ... :( Então, eu estou pensando que isso é uma decisão de design ou os compiladores são péssimos quando se trata de provar que a função é pur

questionAnswers(5)

yourAnswerToTheQuestion