कृपया निम्नलिखित सी ++ 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/अंतिम)
([libstdC++ 4.9 के साथ बजना से एक बग] की तरह लगता है https://bbs.archlinux.org/viewtopic.php?pid=1412317)। – Chnossos
अनुस्मारक: आप किसी भी मुद्दे को हल करने के लिए केवल एक टीयू पर 'std = C++ 11' नहीं छोड़ सकते हैं क्योंकि टीयू में घोषित सभी इकाइयों (एचडीआर में शामिल) के लिए संभावित रूप से ओडीआर तोड़ देगा। नीचे वह रास्ता है [यूबी] (http://en.wikipedia.org/wiki/Undefined_behavior)। तो ड्रॉपपिंग सी ++ 11 का मतलब यह है कि यह आपके सभी प्रोजेक्ट के लिए छोड़ देता है (जब तक कि आपके टीयू में कुछ भी शामिल न हो) – sehe
libstdC++ के बजाय libC++ के साथ और libstdC++ के साथ जीसीसी 4.8 के साथ आया है। मुझे संदेह है कि यह परिवर्तन था: http://gcc.gnu.org/gcc-4.9/porting_to.html (max_align_t के लिए खोजें) –