मैं क्यों बजना निम्नलिखित कोड को खारिज कर दिया है के रूप में खो दिया है:बजना के रूप में अधूरा type_info अस्वीकार हालांकि <typeinfo> शामिल है
#include <typeinfo>
#include <exception>
const char* get_name(const std::exception_ptr eptr)
{
return eptr.__cxa_exception_type()->name();
}
int main() {}
यह जीसीसी के साथ ठीक है, लेकिन बजना शिकायत के बारे में type_info
एक अधूरी प्रकार किया जा रहा है:
$ g++-4.7 -std=c++0x -O3 -Wall -Wextra t.cc -o t
$ clang++-3.2 -std=c++0x -O3 -Wall -Wextra t.cc -o t
t.cc:6:37: error: member access into incomplete type 'const class type_info'
return eptr.__cxa_exception_type()->name();
^
/usr/bin/../lib/gcc/x86_64-linux-gnu/4.7/../../../../include/c++/4.7/bits/exception_ptr.h:144:19: note: forward declaration of
'std::__exception_ptr::type_info'
const class type_info*
^
1 error generated.
$
प्रश्न: मैं इसे क्लैंग के साथ कैसे ठीक करूं? या क्या मुझे कुछ याद आ रहा है और क्लैंग कोड को अस्वीकार करने का अधिकार है?
के लिए तय हो गई है आप 'नहीं के साथ std :: type_info' लेकिन' एसटीडी के साथ समस्या है :: __ exception_ptr :: type_info', जो होने के लिए की तरह लगता है जीसीसी विशेष। –
आप गैर मानक कार्यों का उपयोग कर रहे हैं, आप क्या उम्मीद करते हैं? – Pubby
मैं libC++ का उपयोग नहीं कर रहा हूं, लेकिन libstdC++ (जैसा कि आप त्रुटि संदेश में पथ से देख सकते हैं)। और 'std :: __ upgrade_ptr :: type_info' वास्तव में गलत तरीके से बनाई गई अग्रेषित घोषणा है क्योंकि क्लैंग 'std :: type_info' नहीं लेता है क्योंकि आप त्रुटि संदेश के शीर्षलेख में चेक कर सकते हैं। और गैर मानक ... अच्छा ... असली दुनिया सही नहीं है। यह कोड-बेस का हिस्सा है जिसे मैं क्लैंग में भेज रहा हूं। मैं बस कुछ रचनात्मक मदद की उम्मीद कर रहा था। ओएस एक्स पर –