Sur le site Web d’état de prise en charge de clang C ++ 11, http://clang.llvm.org/cxx_status.html , “Liste d’initialiseurs” et “Expression lambda” sont tous pris en charge à partir de la version 3.1.
Cependant, en utilisant LLVM / Clang trunk (3.2), la compilation avec la liste d’initialisation et l’expression lambda générera des messages d’erreur.
Est-ce que quelqu’un sait si Clang> 3.1 prend en charge ces fonctionnalités?
Par défaut, clang++
pas les fonctionnalités de C ++ 11 – vous devez passer un indicateur supplémentaire lors de la compilation .
clang++ -std=c++11 [input files...]
Ou
# enables some additional C++11 extensions GCC has clang++ -std=gnu++11 [input files...]
De plus, vous pouvez basculer entre libstdc++
et la propre libc++
de Clang, qui sont des implémentations différentes de la bibliothèque standard C ++. Dans certains cas, libc++
peut avoir une meilleure implémentation du standard C ++ 11 que votre bibliothèque libstdc++
existante.
# 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]
Ce dernier point est important si vous utilisez Clang dans un environnement doté d’une version obsolète de libstdc++
(telle que Mac OSX), mais notez que les deux bibliothèques C ++ ne sont pas compatibles. vous deviez l’utiliser.
La page http://clang.llvm.org/cxx_status.html est source de confusion au mieux. Actuellement, la version 3.1 publiée ne prend pas en charge les listes d’initialisation ni les lambdas (je suis donc revenue à GCC 4.8 pour le moment).
Vous pouvez toujours vérifier le support de clang pour les fonctionnalités à l’aide de la macro __has__feature
, en suivant les instructions ci-dessous:
http://clang.llvm.org/docs/LanguageExtensions.html#checking_language_features
Par exemple, __has_feature(cxx_generalized_initializers)
ou __has_feature(cxx_lambdas)
renverra la valeur true si ces fonctionnalités sont disponibles et activées.
Personnellement, je m’attends à ce que ces fonctionnalités soient prêtes pour Clang 4.0, qui devrait être publié avec le prochain Xcode (probablement juin 2012).
– Édité pour clarifier les versions que j’ai testées – il est clair que la version clang est plus complexe que je ne le pensais.