Статус поддержки Clang 3.1 и С++ 11
Из веб-сайта статуса поддержки clang С++ 11 http://clang.llvm.org/cxx_status.html говорится: "Инициализационный список" и "Лямбда-выражение" поддерживаются начиная с версии 3.1.
Однако, используя LLVM/Clang trunk (3.2), компиляция в отношении списка инициализаторов и лямбда-выражения приведет к сообщениям об ошибках.
Кто-нибудь знает, поддерживает ли Clang > 3.1 эти функции?
Ответы
Ответ 1
По умолчанию clang++
не включит возможности С++ 11 - у вас передать дополнительный флаг во время компиляции.
clang++ -std=c++11 [input files...]
или
# enables some additional C++11 extensions GCC has
clang++ -std=gnu++11 [input files...]
Кроме того, вы можете переключаться между libstdc++
и Clang own libc++
, которые представляют собой различные реализации стандартной библиотеки С++. libc++
в некоторых случаях может иметь лучшую реализацию стандарта С++ 11, чем существующая библиотека libstdc++
.
# uses clang C++ library in C++98 mode
clang++ -stdlib=libc++ [input] # uses clang C++ library
# uses clang C++ library and enables C++11 mode
clang++ -stdlib=libc++ -std=c++11 [input]
Последнее важно, если вы используете Clang в среде с устаревшей версией libstdc++
(например, Mac OSX), но обратите внимание, что две библиотеки С++ несовместимы друг с другом, поэтому вам придется перестроить любые зависимости от libc++
, если вы будете использовать это.
Ответ 2
Страница в http://clang.llvm.org/cxx_status.html сбивает с толку в лучшем случае. В настоящее время выпущенная версия 3.1 не поддерживает списки инициализаторов или lambdas (поэтому я переключился обратно на GCC 4.8 на данный момент).
Вы всегда можете проверить поддержку clang для функций с помощью макроса __has__feature
в соответствии с инструкциями здесь:
http://clang.llvm.org/docs/LanguageExtensions.html#checking_language_features
Например, __has_feature(cxx_generalized_initializers)
или __has_feature(cxx_lambdas)
вернет true, если эти функции доступны и включены.
Лично я ожидаю, что эти функции будут готовы к clang 4.0, который, как ожидается, будет выпущен со следующим Xcode (вероятно, июнь 2012 года).
- Отредактировано для уточнения версий, которые я тестировал, - ясно, что управление версиями clang более сложное, чем я понял.