Podczas wytwarzania MCVE dla this problemu natknąłem, Znalazłem następujące rozbieżność między kompilatory:Deklaracja przekazania funkcji `constexpr` wewnątrz innej funkcji - Błąd kompilatora?
Rozważmy następujący kod:
// 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;
}
Ten kod kompiluje się na Clang 3.8.0, ale nie na GCC 6.1.0 z:
error: 'constexpr int f()' used before its definition
zakomentowanie // 2
i odkomentowanie // 1
prace na obu kompilatorów.
ciekawe, przesuwając f
„s definicji zamiast // 1
kompilacji, ale wyzwala ostrzeżenie przy // 2
:
warning: inline function 'constexpr int f()' used but never defined
Który kompilator ma rację?
Standard nie wydaje się całkiem jasny. Potrzebujemy silnego prawnika tutaj :) – Arunmu