Xcode 4.2 и лямбда-выражения (OSX Lion) - PullRequest
2 голосов
/ 10 ноября 2011

Я пытаюсь получить возможности C ++ 11 для компиляции на моем Mac. Я пробовал две разные вещи до сих пор. Во-первых, последний Xcode (4.2) утверждает, что поддерживает «функции C ++ 11», но когда я пытаюсь скомпилировать это:

#include <iostream>

int main()
{
    using namespace std;
    int n = [] (int x, int y) { return x + y; }(5, 4);
    cout << n << endl;
}

Я получаю ошибку "ожидаемое выражение" для первой скобки ([). Я предполагаю, что лямбда-выражения не включены в новые функции C ++ 11?

Затем, в качестве обходного пути, я скачал двоичные файлы gcc 4.6 из http://hpc.sourceforge.net/, но когда я использую gcc-4.6 (/usr/local/bin/gcc-4.6 -std = c ++ 0x test.cpp) Я получаю:

Undefined symbols for architecture x86_64:
  "std::cout", referenced from:
      _main in cctnMUFF.o
...

Думаю, проблема в том, что не удалось найти стандартную библиотеку?

Спасибо!

Ответы [ 2 ]

6 голосов
/ 10 ноября 2011

XCode 4.2 поставляется с поздним Clang 2.9, исправленным Apple. Он не поддерживает ни лямбда, ни универсальные инициализаторы. Clang 3.0 тоже не работает, так что вам придется подождать хотя бы Clang 3.1 (срок действия которого через 6 месяцев).

В качестве альтернативы, вы можете использовать GCC 4.6 Macports для поддержки лямбды.


ОБНОВЛЕНИЕ для вашего обновления: вам нужно связать с g++ или добавить -lstdc++ вручную.

0 голосов
/ 10 ноября 2011

Добавлена ​​поддержка лямбды в gcc 4.5. Xcode использует gcc 4.2, и маловероятно, что он когда-либо будет обновлен до более новой версии (скорее всего, из-за того, что более новые версии gcc лицензируются с GPL3). Дайте нам знать, если вам удастся настроить Xcode для работы с gcc 4.5 или 4.6 ... Поэтому Apple переключается на Clang. Будем надеяться, что Clang скоро поддержит большинство функций C ++ 11 ...

...