Подтвердить что ты не робот

Статус поддержки Clang 3.1 и С++ 11

Из веб-сайта статуса поддержки clang С++ 11 http://clang.llvm.org/cxx_status.html говорится: "Инициализационный список" и "Лямбда-выражение" поддерживаются начиная с версии 3.1.

Однако, используя LLVM/Clang trunk (3.2), компиляция в отношении списка инициализаторов и лямбда-выражения приведет к сообщениям об ошибках.

Кто-нибудь знает, поддерживает ли Clang > 3.1 эти функции?

4b9b3361

Ответ 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 более сложное, чем я понял.