c++ - std::packaged_task bug in Visual Studio? -
मुझे पता चला है कि std :: packaged_task
को Std :: vector
यदि पैरामीटर का प्रकार दृश्य स्टूडियो (2012, 2013, नवंबर 2013 सीटीपी) में शून्य
देता है। उदाहरण के लिए,
typedef std :: packaged_task & lt; void () & gt; packaged_task; std :: वेक्टर & LT; packaged_task & gt; कार्य; Packaged_task पैकेज; tasks.push_back (std :: चाल (पैकेज)); त्रुटि संदेश हैं: त्रुटि C2182: '_Get_value': अवैध टाइप 'शून्य' त्रुटि का उपयोग C2182: '_Val': का अवैध उपयोग टाइप 'शून्य' त्रुटि C2182: '_Val': गैरकानूनी प्रकार 'शून्य' त्रुटि का उपयोग C2512: 'std :: _ Promise & lt; int & gt;' : कोई उचित डिफ़ॉल्ट कन्स्ट्रक्टर उपलब्ध त्रुटि C2665: 'std :: forward': 2 अतिभारियों में से कोई भी सभी तर्क प्रकारों को रूपांतरित नहीं कर सकता
मुझे लगता है कि यह बग है क्योंकि यह कोड स्निपेट अगर < / P>
- रिटर्न प्रकार
शून्य
नहीं है, - इसे XCode में संकलित किया गया है।
क्या समाधान हैं या दृश्य स्टूडियो में अन्य विकल्प? मुझे पता है कि इसे बदलने के लिए बढ़ावा दिया जा सकता है।
मैं इसे एक सरल ऑटो एम = std :: move (पैकेज);
।
int main () {typedef std :: packaged_task & lt; void () & gt; packagedtask; पैकेटटास्क पी 1; पैकेटटास्क पी 2; P2 = std :: चाल (पी 1); // त्रुटि ऑटो p3 = std :: चाल (पी 2) का कारण नहीं है; // कारण त्रुटि का कारण बनता है}
कोड के माध्यम से ट्रैवलिंग, packaged_task
ने निम्न प्रकार की टाइपिंग के रूप में एम्बेड किया है;
typedef typename _P_arg_type & lt; _Ret & gt; :: प्रकार _Ptype; टाइप-एफ़ _Promise & lt; _Ptype & gt; _MyPromiseType;
_P_arg_type
रिटर्न प्रकार शून्य
है, जब एक गैर-शून्य प्रकार प्रदान करता है। packaged_task
चालन निर्माता में आंतरिक _Promise
के रूप में _Promise & lt; _Ret & gt;
;
_MyPromise के लिए एक संदर्भ होता है _STD फ़ॉरवर्ड & lt; _Promise & lt; _Ret & gt; & gt; (_ अन्य ._MyPromise))
यह तब _Promise & lt; void & gt;
बन जाता है, जो बदले में उत्पन्न अमान्य कोड उत्पन्न करता है देखा त्रुटियों की सूची यह संभवतः होना चाहिए;
_MyPromise (_STD फ़ॉरवर्ड & lt; _MyPromiseType & gt; (_ Other._MyPromise)) संभवत: एक चाल
के उपयोग के रूप में भी असाइनमेंट ऑपरेटर करता है।
एक वैकल्पिक हल के रूप में, किसी प्रकार के "डमी" या "अनुपयोगी" रिटर्न प्रकार को जोड़ने पर विचार करें;
struct unusable {};
या बस केवल एक int
या बढ़ावा देने के रूप में आप पहले से ही सुझाव दिया है।
Comments
Post a Comment