Come esperimento, ho appena messo insieme un po 'di codice per generare un std::array<uint32_t, 256>
in fase di compilazione. I contenuti della tabella sono una tipica tabella di ricerca CRC - l'unica novità è l'uso delle funzioni constexpr
per calcolare le voci anziché mettere una tabella magica autogenerata direttamente nel codice sorgente.Limiti pratici sulla quantità di calcolo di constexpr
In ogni caso, questo esercizio mi ha incuriosito: ci sarebbero state delle limitazioni pratiche sulla quantità di calcolo che un compilatore sarebbe disposto a fare per valutare una funzione constexpr
o una definizione di variabile al momento della compilazione? per esempio. qualcosa come il parametro -ftemplate-depth
di gcc che crea limiti pratici sulla quantità di valutazione della metaprogrammazione del modello. (Mi chiedo anche se ci potrebbero essere limitazioni pratiche per la lunghezza di un pacchetto parametro - che limiterebbe la dimensione di una fase di compilazione std::array
creato utilizzando un oggetto intermedio std::integer_sequence
.)
Se ricordo erroneamente, sì, c'è un limite, ma si suppone che sia di ordine di grandezza più grande del ricorsivo limite di istanziazione. – MikeMB