Si nous prenons en compte les restrictions de l'ordinateur réel - comme la mémoire finie et finie valeur de MAX_INT - puis, bien sûr, constexpr (et également de l'ensemble de C++) n'est pas Turing-complet.
Mais si nous allons supprimer cette restriction - par exemple, si nous pensons à propos de int complètement arbitraire entier positif alors oui, constexpr partie de C++ sera Turing. Il est facile à exprimer toute partielle récursive de la fonction.
0, S(n) = n+1 et des sélecteurs I_n^m(x_1, ..., x_n) = x_m et superposition, évidemment, peut être exprimé à l'aide de constexpr.
La récursion Primitive peut se faire de manière droite:
constexpr int h(int x1, ..., int xn, int y) {
return (xn == 0) ? f(x1, ..., xn) : g(x1, ..., xn, y-1, h(x1, ..., xn, y-1));
}
Et pour une partie de la récursivité nous avons besoin d'un truc simple:
constexpr int h(int x1, ... int xn, int y = 0) {
return (f(x1, ... xn, y) == 0) ? y : h(x1, ..., xn, y+1);
}
Nous obtenons donc toute partielle de la récursivité de la fonction en tant que constexpr.