Statut de prise en charge de Clang 3.1 et C ++ 11

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.