Mentre la produzione di un MCVE per this problema sono incappato, ho trovato il seguente discrepanza tra i compilatori:Inoltra dichiarazione di una funzione `constexpr` all'interno di un'altra funzione - Bug del compilatore?
Si consideri il seguente codice:
// constexpr int f(); // 1
constexpr int g() {
constexpr int f(); // 2
return f();
}
constexpr int f() {
return 42;
}
int main() {
constexpr int i = g();
return i;
}
Questo codice viene compilato in Clang 3.8.0, ma fallisce il GCC 6.1.0 con:
error: 'constexpr int f()' used before its definition
Commentando // 2
e decommentando // 1
lavori su entrambi i compilatori.
È interessante notare che, spostando f
's definizione al posto di // 1
compila, ma innesca un avvertimento a // 2
:
warning: inline function 'constexpr int f()' used but never defined
quale compilatore è giusto?
Lo standard non sembra essere abbastanza chiaro su questo. Abbiamo bisogno di un avvocato forte qui :) – Arunmu