2012-06-12 24 views
11

में प्रारंभकर्ता सूची आज ऐप्पल एक्सकोड के लिए कमांड लाइन टूल्स अपडेट करता है और फिर 318.0.58 से 318.0.61 तक क्लैंग को अपग्रेड करता है।क्लैंग

मैंने प्रारंभकर्ता सूची का उपयोग करने का प्रयास किया है, लेकिन कोड नीचे संकलित नहीं कर सकता।

#include <iostream> 
#include <random> 
#include <initializer_list> 

int main() 
{ 
    std::mt19937 rng(time(NULL)); 

    std::initializer_list<double> probabilities = 
    { 
     0.5, 0.1, 0.1, 0.1, 0.1, 0.1 
    }; 

    std::discrete_distribution<> cheat_dice (probabilities); 

    int a[6] = { }; 

    for (int i = 0 ; i != 1000; ++i) 
    { 
     ++a[cheat_dice(rng)]; 
    } 

    for (int i = 0; i != 6; ++i) 
    { 
     std::cout << i + 1 << "=" << a[i] << std::endl; 
    } 
} 

फिर, मैंने संकलन करने की कोशिश की।

त्रुटि लॉग

foo.cpp:9:10: error: no member named 'initializer_list' in namespace 'std' 
    std::initializer_list<double> probabilities = 
    ~~~~~^ 
foo.cpp:9:33: error: expected '(' for function-style cast or type construction 
    std::initializer_list<double> probabilities = 
          ~~~~~~^ 
foo.cpp:9:35: error: use of undeclared identifier 'probabilities' 
    std::initializer_list<double> probabilities = 
           ^
foo.cpp:10:5: error: expected expression 
    { 
    ^
foo.cpp:14:46: error: use of undeclared identifier 'probabilities' 
    std::discrete_distribution<> cheat_dice (probabilities); 
              ^
5 errors generated. 

दूसरी ओर, मैं जीसीसी-4.7.1-आर सी-20,120,606 साथ कोड ऊपर संकलन कर सकते हैं।

$ g++ -std=c++11 foo.cpp 

क्या ऐप्पल के क्लैंग समर्थन प्रारंभकर्ता सूची नहीं है? बजना संस्करण: -std=c++0x निर्दिष्ट करने (के रूप में @jweyrich सही ढंग से बताया) clang कमांड लाइन के हिस्से के रूप द्वारा

$ clang++ -v 
Apple clang version 3.1 (tags/Apple/clang-318.0.61) (based on LLVM 3.1svn) 
Target: x86_64-apple-darwin11.4.0 
Thread model: posix 

उत्तर

11

प्रयास करें। clang के लिए डिफ़ॉल्ट C++ 98 मोड है। प्रारंभकर्ता सूचियां एक सी ++ 11 सुविधा हैं।

इसके अलावा, क्लैंग सी ++ 98 और सी ++ 11 support page से आप विभिन्न नई सी ++ मानक सुविधाओं की स्थिति की जांच कर सकते हैं। उदाहरण के लिए, प्रारंभकर्ता सूची 3.1 (और ऊपर) में उपलब्ध हैं।

+0

एप्पल के बजना पहचान नहीं कर सकते '-std = C++ 11' – user1214292

+1

@ user1214292: यह पहचानता है' -std = C++ 0x' हालांकि। – jweyrich

+0

@jweyrich लेकिन परिणाम अपरिवर्तित :( – user1214292

7

संकलित आदेश का उपयोग:

clang++ -stdlib=libc++ -std=c++0x foo.cpp 

ध्यान दें कि -std=c++11 भी काम करता है। मेरी मशीन में, चल:

$ clang --version 

परिणामों में:

Apple clang version 4.1 (tags/Apple/clang-421.11.66) (based on LLVM 3.1svn) 
Target: x86_64-apple-darwin12.2.0 
संबंधित मुद्दे