10
下GCC-4.9,5.4以下代碼段錯誤,和6.3與STD = C++ 11,但編譯和下鐺-3.7運行正常,和VS2015更新3與虛擬繼承初始化列表中的lambda捕獲此gcc錯誤?
struct A
{
int Func() { return x++; }
int x = 5;
};
struct B
{
B(int) {}
};
struct Derived : public virtual A, public B
{
Derived()
: A()
// , B(this->Func()) // This works!
, B([this](){ return this->Func(); }()) // But this segfaults.
{
}
};
int main()
{
Derived c;
}
這是中的錯誤GCC? 刪除虛擬繼承可修復段錯誤。
'this'指Derived'的'一個實例。但是直到它的構造實際開始時纔有'Derived',然而,爲了構造基類需要評估這個',但是直到所有的基類都被構造出來,就沒有'Derived'。未定義的行爲。 –
@SamVarshavchik:你應該把它寫成引用標準的答案。那會更好! – Destructor
我實際上試圖找到一些東西,但幾分鐘後我看不到任何東西。我想直到lambdas來臨時,你不可能有一種情況,即在對象實際存在之前你可以擁有一個'this';因此沒有明確說明。 –