2013-07-19 4 views
6

क्या यह निर्धारित करना संभव है कि सी ++ मानक पुस्तकालय में प्रीप्रोसेसर निर्देश का उपयोग कर सी ++ 11 समर्थन है या नहीं?क्या सी ++ 11 मानक पुस्तकालय का पता लगाने के लिए कोई प्रीप्रोसेसर निर्देश है?

मैं वर्तमान में एक प्रोजेक्ट पर काम कर रहा हूं जो सी ++ 11 भाषा बोली का उपयोग करता है, लेकिन सी ++ मानक पुस्तकालय के बिना सी ++ 11 समर्थन के बिना (मुझे यह गैर सी ++ 11 से लिंक करने में सक्षम होना चाहिए पुस्तकालयों)।

मुझे पता है कि मैं #if __cplusplus >= 201103L का उपयोग कर सी ++ 11 समर्थन का परीक्षण कर सकता हूं, लेकिन मेरे मामले में यह सच साबित होगा। मुझे सी ++ 11 के लिए सी ++ मानक लाइब्रेरी समर्थन के बारे में पता होना चाहिए।

+1

संबंधित: http://stackoverflow.com/q/11886288/743214 –

+1

* "मुझे पता है कि मैं' #if __cplusplus> = 201103L' "* - No का उपयोग कर सी ++ 11 समर्थन का परीक्षण कर सकता हूं , वह भी नहीं। यह देखते हुए कि अधिकांश कंपाइलर केवल सी ++ 11 के उप-समूह का समर्थन करते हैं (हालांकि बड़े पैमाने पर सबसेट हो सकता है), यह '__cplusplus' मैक्रो पूरी तरह से बेकार है। मानक सुविधाओं के लिए पोर्टेबल परीक्षण (चाहे वह भाषा या पुस्तकालय हो) अभी भी एक अनसुलझा समस्या है (हालांकि * इसे हल करने के प्रयास * उनके रास्ते पर हैं, जैसे * टेम्पलेटरेक्स * उनके उत्तर में बताते हैं)। –

+1

मेरे लिए, आपकी समस्या यह है कि आपको सीएमके या ऑटोोटूल जैसे कॉन्फ़िगरेशन टूल की आवश्यकता है। वे आपके लिए जांच करते हैं और एक शीर्षलेख उत्पन्न करते हैं जिसमें मैक्रोज़ शामिल होते हैं जिनका आप मूल्यांकन कर सकते हैं। यदि आपके पास केवल एक लाइब्रेरी है, तो आप अपने उपयोगकर्ताओं से मैक्रो प्रदान करने का अनुरोध कर सकते हैं - अभी भी एक खराब समाधान। – usr1234567

उत्तर

3

परीक्षण मानक समिति अगले सी ++ 14 मानक (और उस से परे) की ओर जाने के लिए एक सक्रिय अनुसंधान दिशा है: पूरा कोड किया जा रहा समाप्त हो गया। एक अध्ययन समूह 10 है जो अपने स्वतंत्र रूप से सुलभ mailinglist है जहां वर्तमान विकास पर चर्चा की जा रही है। अगली बैठक के लिए, यह N3694 working paper सबमिट कर दिया गया है।

3

मेरी समस्या आईओएस मंच पर थी जहां सी ++ मानक पुस्तकालय की पसंद libstd++ (GNU C++ standard library) और libc++ (LLVM C++ standard library with C++11 support) के बीच थी। मैं _GLIBCXX_ का उपयोग कर समाप्त हुआ।

सुविधाओं के लिए
#ifndef _GLIBCXX_ 
template <class T> 
T&& move (T& arg) noexcept { 
    return static_cast<T&&>(arg); 
} 
#endif 
+1

मुझे लगता है कि आपका मतलब '__GLIBCXX__' है, और क्या आपका मतलब' ifdef' 'ifndef' नहीं है? आपका परीक्षण मानता है कि libstdC++ में कभी भी C++ 11 समर्थन नहीं है, लेकिन यह सच नहीं है, केवल आपके पुराने मैक के साथ आने वाला प्राचीन संस्करण कोई सी ++ 11 समर्थन नहीं है। –

+0

... एक साल बाद ... मैं वास्तव में मानक पुस्तकालय के स्वचालित निरीक्षण पर भरोसा करने के बजाय अपने स्वयं के मैनुअल प्रीप्रोसेसर परिभाषाओं का उपयोग कर समाप्त हुआ। – Mortennobel

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