同時產生了this問題,我偶然發現了一個MCVE,我發現編譯器之間的差異如下:在另一個函數內部的`constexpr`函數的前向聲明 - 編譯器錯誤?
考慮下面的代碼:
// 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;
}
此代碼編譯上鐺3.8.0,但失敗在GCC 6.1.0有:
error: 'constexpr int f()' used before its definition
註釋掉// 2
和取消註釋在兩種編譯器// 1
作品。
有趣的是,移動f
的代替// 1
編譯定義,但在觸發一個// 2
警告:
warning: inline function 'constexpr int f()' used but never defined
哪個編譯器是正確的?