2012-11-06 17 views
6

कक्षा सदस्य के पैरामीटर के रूप में डिफ़ॉल्ट फ़ंक्शन निर्दिष्ट कैसे करें?जीसीसी बग या नहीं: डिफ़ॉल्ट std :: function?

एक मौजूदा उदाहरण मेरे कोड से प्राप्त होता है:

#include <iostream> 
#include <functional> 

template<typename T> struct C 
{ 
    static T test(std::function<T(int)> f = [](int i){return i;}) 
    {return f(42);} 
}; 

int main(int argc, char* argv[]) 
{ 
    C<int>::test(); // ERROR = internal compiler error : in tsubst_copy, at cp/pt.c:11354 
    C<int>::test([](int i){return i;}); // OK 
    return 0; 
} 

यह जीसीसी के एक बग है?

क्या किसी अन्य वाक्यविन्यास के साथ इस समस्या से बचना संभव है?

क्या आप इसे अन्य सी ++ 11 कंपाइलर्स (उन लोगों के लिए) पर आज़मा सकते हैं?

+13

एक आंतरिक संकलक त्रुटि हमेशा संकलक में एक बग है। –

+2

'क्या आप इसे अन्य सी ++ 11 कंपाइलर्स (उन लोगों के लिए) पर आज़मा सकते हैं?' आप इसे करते हैं! –

+2

जैसा ही हो सकता है: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53486 –

उत्तर

5

प्रश्न के बिना, यह एक कंपाइलर बग है। भले ही आपका प्रोग्राम अच्छी तरह से गठित हुआ हो, संकलक ने अपने डेटा संरचनाओं में एक असंगतता का पता लगाया है।

जीसीसी बग रिपोर्टिंग निर्देशों का पालन करें: http://gcc.gnu.org/bugs/#report

+0

ठीक है, बग की सूचना दी गई है। धन्यवाद ! – Vincent