2014-05-04 4 views
7

कृपया निम्नलिखित सी ++ 11 टुकड़ा पर एक नज़र डालें:बजना ++ केवल सी ++ 11 कार्यक्रम संकलित बढ़ावा :: प्रारूप का उपयोग कर जब -std = C++ 11 विकल्प हटा दिया गया है

#include <boost/format.hpp> 

int main(int argc, char** argv) 
{ 
    auto s = boost::format(""); 
    return 0; 
} 

जब मैं संकलन इसे का उपयोग -std=c++11 मैं निम्नलिखित त्रुटि मिलती है बजना के साथ:

$ clang++ -o main main.cpp 
main.cpp:5:3: warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions] 
    auto s = boost::format(""); 
^
:

$ clang++ -std=c++11 -o main main.cpp 
In file included from main.cpp:1: 
In file included from /usr/include/boost/format.hpp:19: 
In file included from /usr/include/boost/detail/workaround.hpp:41: 
In file included from /usr/include/boost/config.hpp:40: 
In file included from /usr/include/boost/config/select_stdlib_config.hpp:18: 
/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/4.9.0/../../../../include/c++/4.9.0/cstddef:51:11: error: 
     no member named 'max_align_t' in the global namespace 
    using ::max_align_t; 
     ~~^ 
1 error generated. 

बिना -std=c++11 सब कुछ ठीक संकलित, लेकिन बजना एक चेतावनी प्रिंट

तो, ऐसा लगता है कि सी ++ 11 ध्वज ड्रॉप करने के लिए एक वैध वर्कअराउंड है, क्योंकि क्लैंग का वर्तमान संस्करण सी ++ 11 मोड में प्रतीत होता है, वैसे भी? दोष यह है कि आपको कई चेतावनियां मिलेंगी।

क्या जीसीसी में पूरी तरह से स्विच करने के अलावा कोई बेहतर कामकाज है? बढ़ावा :: स्रोत या gcc-libs के स्रोत कोड को पैच करना मेरे लिए ठीक है।


सिस्टम जानकारी:

  • प्लेटफार्म: आर्क लिनक्स x86_64
  • बूस्ट संस्करण: 1.55.0-6
  • जीसीसी-libs: 4.9.0-1
  • बजना ++: 3.4 (टैग/RELEASE_34/अंतिम)
+5

([libstdC++ 4.9 के साथ बजना से एक बग] की तरह लगता है https://bbs.archlinux.org/viewtopic.php?pid=1412317)। – Chnossos

+0

अनुस्मारक: आप किसी भी मुद्दे को हल करने के लिए केवल एक टीयू पर 'std = C++ 11' नहीं छोड़ सकते हैं क्योंकि टीयू में घोषित सभी इकाइयों (एचडीआर में शामिल) के लिए संभावित रूप से ओडीआर तोड़ देगा। नीचे वह रास्ता है [यूबी] (http://en.wikipedia.org/wiki/Undefined_behavior)। तो ड्रॉपपिंग सी ++ 11 का मतलब यह है कि यह आपके सभी प्रोजेक्ट के लिए छोड़ देता है (जब तक कि आपके टीयू में कुछ भी शामिल न हो) – sehe

+4

libstdC++ के बजाय libC++ के साथ और libstdC++ के साथ जीसीसी 4.8 के साथ आया है। मुझे संदेह है कि यह परिवर्तन था: http://gcc.gnu.org/gcc-4.9/porting_to.html (max_align_t के लिए खोजें) –

उत्तर

2

bug अब बंद है। यह आर्क में क्लैंग 3.4-2 के साथ तय किया जाना चाहिए।

this commit के साथ, ईवैंजेलोस Foutras नदी के ऊपर से निम्नलिखित पैच विलय कर दिया: http://reviews.llvm.org/rL201729

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