2012-05-15 21 views
22

क्लैंग की सी ++ 11 समर्थन स्थिति वेबसाइट, http://clang.llvm.org/cxx_status.html से, यह कहता है, "प्रारंभकर्ता सूची" और "लैम्ब्डा अभिव्यक्ति" सभी संस्करण 3.1 से शुरू होने वाले समर्थित हैं।क्लैंग 3.1 और सी ++ 11 समर्थन स्थिति

हालांकि, एलएलवीएम/क्लैंग ट्रंक (3.2) का उपयोग करके, प्रारंभकर्ता सूची और लैम्ब्डा अभिव्यक्ति के खिलाफ संकलन त्रुटि संदेश उत्पन्न करेगा।

क्या किसी को पता है कि क्लैंग> 3.1 उन सुविधाओं का समर्थन करता है या नहीं?

+0

संभावित डुप्लिकेट [मैं क्लैंग में सी ++ 11 सुविधाओं का उपयोग कैसे कर सकता हूं?] (Http://stackoverflow.com/questions/10408849/how-can-i-use-c-11-features-in-clang) –

उत्तर

29

डिफ़ॉल्ट रूप से, clang++ सी ++ 11 सुविधाओं को सक्षम नहीं करेगा - आपके पास to pass an additional flag during compilation है।

clang++ -std=c++11 [input files...] 

या

# enables some additional C++11 extensions GCC has 
clang++ -std=gnu++11 [input files...] 

साथ ही, आपको libstdc++ का उपयोग करने और बजना की अपनी libc++, जो सी ++ मानक पुस्तकालय के विभिन्न कार्यान्वयन हैं के बीच स्विच कर सकते हैं। कुछ मामलों में libc++ आपके मौजूदा libstdc++ लाइब्रेरी की तुलना में C++ 11 मानक का बेहतर कार्यान्वयन हो सकता है।

# uses clang's C++ library in C++98 mode 
clang++ -stdlib=libc++ [input] # uses clang's C++ library 

# uses clang's C++ library and enables C++11 mode 
clang++ -stdlib=libc++ -std=c++11 [input] 

बाद, यदि आप libstdc++ (मैक OSX) की तरह के एक पुराने संस्करण के साथ एक वातावरण में बजना का उपयोग कर रहे हैं, लेकिन ध्यान दें कि दो सी ++ पुस्तकालयों एक दूसरे के साथ संगत नहीं हैं महत्वपूर्ण है ताकि आप के लिए होता है libc++ के खिलाफ किसी भी निर्भरता को पुनर्निर्माण करने के लिए यदि आप इसका उपयोग करना चाहते थे।

+1

दूसरा जीसीसी संगतता के लिए नहीं है। जीसीसी में सख्त 'सी ++ 11' मोड भी है। 'gnu ++ 11' संभवतः आंतरिक कोड के लिए आवश्यक कुछ जीएनयू एक्सटेंशन सक्षम करने के लिए है और निश्चित रूप से glibc (जो शायद' gnu90' या 'gnu99' होगा)। – rubenvb

+0

धन्यवाद @ रूबेनव - स्पष्ट। – birryree

+0

'-std' कमांड लाइन स्विच का उपयोग करने से उन प्रश्नों को सक्षम नहीं किया जाएगा जिन पर प्रश्नकर्ता पूछ रहा है क्योंकि वे अभी तक क्लैंग द्वारा समर्थित नहीं हैं। –

0

http://clang.llvm.org/cxx_status.html पर पृष्ठ सबसे अच्छा भ्रमित है। वर्तमान में, जारी किया गया 3.1 संस्करण प्रारंभकर्ता सूचियों या लैम्ब्डा का समर्थन नहीं करता है (इसलिए मैंने समय के लिए जीसीसी 4.8 पर वापस स्विच किया है)।

तुम हमेशा __has__feature मैक्रो का उपयोग सुविधाओं के लिए बजना समर्थन जाँच कर सकते हैं, यहां दिए गए निर्देशों के अनुसार:

http://clang.llvm.org/docs/LanguageExtensions.html#checking_language_features

उदाहरण के लिए, __has_feature(cxx_generalized_initializers) या __has_feature(cxx_lambdas) अगर उन सुविधाओं उपलब्ध हैं और सक्षम सच वापस आ जाएगी।

व्यक्तिगत रूप से, मैं उन सुविधाओं को क्लैंग 4.0 द्वारा तैयार होने की उम्मीद कर रहा हूं, जो अगले एक्सकोड (जून 2012 की संभावना) के साथ रिलीज होने की उम्मीद है।

- उन संस्करणों को स्पष्ट करने के लिए संपादित किया गया है जिन्हें मैं परीक्षण कर रहा हूं - स्पष्ट रूप से, क्लैंग वर्जनिंग मुझे जितनी जटिल थी, उससे अधिक जटिल है।

+0

क्लैंग ++ -std = C++ 11 on2.9 या इसके बाद की कोशिश करें। उनके पास अच्छी चीजें हैं। – emsr

+1

प्रश्न विशेष रूप से प्रारंभकर्ता सूचियों और लैम्ब्डा अभिव्यक्तियों के बारे में थे। clang 2.9 उन सुविधाओं का समर्थन नहीं करता है। –

+2

आरंभकर्ता सूची और लैम्बडा दोनों क्लैंग 3.1 द्वारा समर्थित हैं, और अब कुछ समय के लिए ट्रंक के शीर्ष द्वारा समर्थित हैं। इसके अलावा स्थिति पृष्ठ अभी भी थोड़ी देर के लिए काफी अच्छी तरह से रखा गया है। – bames53

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