2017-05-02 13 views
10

जीसीसी-4.9, 5.4 के अंतर्गत निम्नलिखित कोड segfaults, और एसटीडी = C++ 11 के साथ 6.3, लेकिन compiles और बजना-3.7 के तहत ठीक चलाता है, और VS2015 अद्यतन 3.जीसीसी बग?

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; 
} 

इस में एक बग है जीसीसी? आभासी विरासत को हटाने से segfault को ठीक किया जाता है।

+5

'' this' Derived' का एक उदाहरण को दर्शाता है। लेकिन जब तक इसका निर्माण वास्तव में शुरू नहीं होता तब तक कोई 'व्युत्पन्न' नहीं होता है, फिर भी, बेस वर्ग बनाने के लिए 'इस' का मूल्यांकन किया जाना चाहिए, लेकिन जब तक सभी मूल वर्गों का निर्माण नहीं किया जाता है, वहां कोई 'व्युत्पन्न' नहीं होता है। अपरिभाषित व्यवहार। –

+0

@SamVarshavchik: आपको इसे मानक उद्धृत करने के उत्तर के रूप में लिखना चाहिए। ये अच्छा रहेगा !!! – Destructor

+0

मैंने वास्तव में कुछ खोजने की कोशिश की, लेकिन, कुछ मिनटों के बाद मुझे वास्तव में कुछ भी नहीं मिला। मुझे लगता है कि जब तक भेड़ के बच्चे आपके पास नहीं आते थे, तब तक ऐसी स्थिति नहीं हो सकती थी जहां वस्तु वास्तव में मौजूद होने से पहले 'यह' हो सके; इसलिए यह स्पष्ट रूप से वर्तनी नहीं है। –

उत्तर

संबंधित मुद्दे