C ++ 11 — Clang’s поддержка C ++ 11 лямбда

У меня есть этот код C ++ 11, который использует лямбда, это пример.

#include <iostream>

using namespace std;

int main()
{
auto func = [] () { cout << "Hello world"; };
func(); // now call the function
}

Когда я скомпилировал этот код с помощью Clang 3.1 (Apple clang version 3.1 (tags/Apple/clang-318.0.54) (based on LLVM 3.1svn)) Я получил эту ошибку

lambda.cpp:7:17: error: expected expression
auto func = [] () { cout << "Hello world"; };

Что может быть не так? В этот сайт, Похоже, лямбда поддерживается clang 3.1.

ADDED

С опцией -std = gnu ++ 11 или c ++ 11 я получил эти сообщения об ошибках.

0.      Program arguments: /usr/bin/clang -cc1 -triple x86_64-apple-macosx10.7.4 -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name lambda.cpp -pic-level 1 -mdisable-fp-elim -relaxed-aliasing -masm-verbose -munwind-tables -target-cpu core2 -target-linker-version 128.2 -resource-dir /usr/bin/../lib/clang/3.1 -fmodule-cache-path /var/folders/ng/h2hkycqd2q5g2hz42c47bt4w0000gn/T/clang-module-cache -std=gnu++11 -fdeprecated-macro -fdebug-compilation-dir /Users/smcho/Desktop/C++test -ferror-limit 19 -fmessage-length 173 -stack-protector 1 -fblocks -fobjc-runtime-has-arc -fobjc-runtime-has-weak -fobjc-dispatch-method=mixed -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o /var/folders/ng/h2hkycqd2q5g2hz42c47bt4w0000gn/T/lambda-XvZzHg.o -x c++ lambda.cpp
1.      lambda.cpp:7:49: current parser token ';'
2.      lambda.cpp:6:1: parsing function body 'main'
3.      lambda.cpp:6:1: in compound statement ('{}')
clang: error: unable to execute command: Segmentation fault: 11
clang: error: clang frontend command failed due to signal 2 (use -v to see invocation)
clang: note: diagnostic msg: Please submit a bug report to http://developer.apple.com/bugreporter/ and include command line arguments and all diagnostic information.
clang: note: diagnostic msg: Preprocessed source(s) and associated run script(s) are located at:
clang: note: diagnostic msg: /var/folders/ng/h2hkycqd2q5g2hz42c47bt4w0000gn/T/lambda-roTwCZ.ii
clang: note: diagnostic msg: /var/folders/ng/h2hkycqd2q5g2hz42c47bt4w0000gn/T/lambda-roTwCZ.sh

12

Решение

Это потому что лязг ++ по умолчанию компилирует ваш код, используя стандарт ISO C ++ 1998 (включая дефекты, указанные в стандарте ISO C ++ 2003), за исключением «экспорта» (который был удален в C ++ 11)

Лямбды являются частью Clang-х Расширение языка C ++ 11, поэтому вам нужно скомпилировать ваш код с -станд = C ++ 11 или же -станд = гну ++ 11

Также см: Clang 3.1 и C ++ 11 поддерживают статус а также Активация поддержки C ++ 11 в Clang

РЕДАКТИРОВАТЬ: Я думаю, что вы пытаетесь скомпилировать свою программу с компилятором C (лязг), а не компилятор C ++ (лязг ++) или ваша установка Clang не ссылается на Libc или же libstdc ++. Попробуйте связать каждую библиотеку, чтобы увидеть, какая из них работает для вас, возможно, что libc может быть не установлен в вашей системе.

Попробуйте скомпилировать вашу программу в режиме C ++ 11, используя лязг ++ исполняемый файл (компилятор C ++) и связать его с Стандартная библиотека Clang C ++ или Стандартная библиотека GNU C ++

1)

# Uses Clang C++ Library and enables C++11 mode
clang++ -stdlib=libc++ -std=c++11 [input]

2)

# Uses GNU Standard C++ Library and enables C++11 mode
clang++ -stdlib=libstdc++ -std=c++11 [input]

Другая возможная проблема может заключаться в том, что вы не скомпилировали Clang с правильными параметрами для включения языковых расширений C ++ 11, попробуйте проверить документацию на наличие правильных флагов, которые будут использоваться при настройке процесса компиляции для Clang.

19

Другие решения

Xcode обновляется с помощью AppStore, но все равно падает на моем Mac (Lion 10.7.5)

Я мог бы скачать macport, чтобы успешно скомпилировать пример.

sudo port install clang-3.1
clang++-mp-3.1 -std=c++11 lambda.cpp
3

Отвечая на недавно отредактированный пост:

Я немного исследовал эту проблему, и это ошибка, которая была исправлена ​​в релизных версиях clang 3.1, В настоящее время я использую:

Debian clang version 3.1-3eudoxos1 (branches/release_31) (based on LLVM 3.1)

Однако, когда я проверил с clang 3.0-6ubuntu3 Я получаю ошибку, похожую на ту, которую вы опубликовали.

Поскольку ваша версия помечена из SVN, я предполагаю, что ваша проблема в том, что она из предварительных версий 3.1, и поддержка лямбды еще не полностью реализована.

Я могу подтвердить, что лямбды работают в clang, потому что я работаю над проектом, который использует их, и мы нацелены как на clang, так и на gcc. Есть несколько ошибок компилятора, которые возникают время от времени; тем не менее, нет ничего проще, чем ваш пример, конечно.

Поэтому я рекомендую обновить вашу версию Clang.

2

Мне нужно было установить инструменты командной строки, как объясняется в этом посте — Xcode 4.4 идет с подрывной деятельностью?

введите описание изображения здесь

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector