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

Clang поддержка С++ 11 лямбда

У меня есть этот код С++ 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"; };

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

ADDED

С -std = gnu ++ 11 или С++ 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
4b9b3361

Ответ 1

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

Lambdas являются частью Clang's Расширение языка С++ 11, поэтому вам нужно скомпилировать свой код с помощью -std = С++ 11 или -std = gnu ++ 11

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

EDIT: Я думаю, что вы пытаетесь скомпилировать свою программу с помощью компилятора C (clang), а не компилятора С++ ( clang++), или ваша установка Clang не ссылку на libc или libstdС++. Попробуйте установить связь с каждой библиотекой, чтобы увидеть, какой из них работает для вас, возможно, что libc не может быть установлен в вашей системе.

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

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 с правильными параметрами для включения расширений языка С++ 11, попробуйте проверить документацию на правильные флаги, которые будут использоваться при настройке процесса компиляции для Clang.

Ответ 2

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 и поддержки лямбда еще не была полностью реализована.

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

Итак, моя рекомендация - обновить вашу версию clang.

Ответ 4

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

enter image description here