2012-05-15 20 views
22

Clang C++ 11 destek durumu web sitesinden, http://clang.llvm.org/cxx_status.html, "Başlatılabilir Liste" ve "Lambda İfade" sürüm 3.1'den itibaren destekleniyor. Bununla birlikte, LLVM/Clang trunk (3.2) kullanarak, başlatıcı listesine ve lambda ifadesine karşı derleme hata iletileri verecektir.Clang 3.1 ve C++ 11 destek durumu

Clang> 3.1 bu özellikleri destekleyip desteklemediğini bilen var mı?

+0

olası yinelenen [Clang içinde C++ 11 özelliklerini nasıl kullanabilirim?] (Http://stackoverflow.com/questions/10408849/how-can-i-use-c-11-features-in-clang) –

cevap

29

Varsayılan olarak, clang++, C++ 11 özelliklerini etkinleştirmez - to pass an additional flag during compilation ürününüz var.

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

Ya

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

Ayrıca, libstdc++ kullanarak ve Clang en libc++ kendi, C++ standart kütüphanenin farklı uygulamaları olan arasında geçiş yapabilirsiniz. Bazı durumlarda libc++, mevcut libstdc++ kitaplığınızdan C++ 11 standardının daha iyi uygulanmasına sahip olabilir. Eğer libstdc++ (Mac OSX gibi) eski bir sürümüyle bir ortamda clang kullanarak, ancak iki C++ kütüphaneleri birbiriyle uyumlu değildir unutmayın eğer sen olurdu böylece

# 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] 

ikincisi önemlidir, Bunu kullanmak için libc++ karşı bağımlılıkları yeniden inşa etmek.

+1

İkincisi GCC uyumluluğu için değil. GCC de sıkı bir 'C++ 11' moduna sahiptir. gnu ++ 11, muhtemelen dahili kod için gerekli olan bazı GNU uzantılarını etkinleştirmek içindir ve kesinlikle glibc (muhtemelen gnu90 veya gnu99 olabilir). – rubenvb

+0

Teşekkürler @rubenvb - clarified. – birryree

+0

'-std' komut satırı anahtarını kullanmak, soru sorucunun sorduğu özellikleri henüz etkinleştirmediği için henüz clang tarafından desteklenmez. –

0

http://clang.llvm.org/cxx_status.html adresindeki sayfa en iyi şekilde kafa karıştırıcıdır. Şu anda, yayımlanan 3.1 sürümü başlatıcı listelerini veya lambdaları desteklemiyor (bu yüzden şimdilik GCC 4.8'e geri döndüm).

her zaman burada talimatlara göre, __has__feature makro kullanarak özellikler için çınlama destek kontrol edebilirsiniz: bu özellikler kullanılabilir ve etkinleştirilmiş ise

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

Örneğin, __has_feature(cxx_generalized_initializers) veya __has_feature(cxx_lambdas) gerçek dönecektir. Şahsen, bu özelliklerin bir sonraki Xcode ile piyasaya sürülmesi beklenen clang 4.0 tarafından hazır olmasını bekliyorum (büyük olasılıkla Haziran 2012).

- Test ettiğim sürümleri açıklığa kavuşturmak üzere düzenlenmiş - açık bir şekilde, clang sürüm oluşturma, benim gerçekleştirdiğimden daha karmaşıktır.

+0

clang ++ -std = C++ 11 on2.9 ya da ötesini deneyin. İyi şeyleri var. – emsr

+1

Sorular özellikle başlatıcı listeleri ve lambda ifadeleri hakkındaydı. clang 2.9 bu özellikleri desteklemiyor. –

+2

Başlatıcı listeleri ve lambda'nın ikisi de clang 3.1 tarafından desteklenmektedir ve şu anda bir süredir gövdenin üstünde desteklenmiştir. Ayrıca, durum sayfası bir süredir oldukça iyi durumda tutulmaktadır. – bames53