Можно ли использовать С++ 11 с Xcode?

Я рассматриваю использование некоторых функций С++ 11 (например, auto например) в некоторых кросс-платформенных проектах (Windows + Mac). В Windows Visual Studio поддерживает части предстоящего стандарта С++ 11, которые позволят мне упростить части базы кода, поэтому, естественно, мне было бы интересно начать использовать эти функции.

Но насколько мне известно, текущая версия XCode (3.2.4 + GCC 4.2) вообще не поддерживает какие-либо возможности С++ 11. Могу ли я обновить версию GCC или версию CLang? Или я должен просто кусать свой язык и ждать, пока Apple собирается упаковать новую версию в будущем?

Ответ 1

Xcode 4.2 наконец-то добавил поддержку С++ 0X:

  • На экране настроек сборки проекта включите опции "Все".

  • В разделе "Параметры сборки" установите компилятор в "Apple LLVM compiler 3.0".

  • Прокрутите вниз до раздела "Apple LLVM Compiler 3.0 - Language" и установите "Диалоговый язык С++" на "С++ 0X" и "Стандартная библиотека С++" на "libС++".

Известно, что std:: move(), move constructor и R-Value работают как ожидалось, и я тестирую std:: thread и std:: atomic.

Ответ 2

======= Обновление 2012: =======

Начните с Clang - многие возможности С++ 11 теперь доступны в Clang. Он включается в Xcode.

======= Оригинальный ответ от января 2011 года: =======

Intel-компилятор может быть самым чистым способом в это время. http://software.intel.com/en-us/articles/intel-composer-xe/

clang многообещающий, но не особенно стабильный или признанный wrt С++ 0x. С++ все еще очень новый для clang.

gcc: относительно зрелый, но вам придется писать и поддерживать ваши компиляторы для xcode.

вы также можете указать пользовательские сценарии, но это боль для поддержания... если вы не изо всех сил и не создаете инструмент адаптера.

Ответ 3

Xcode использует компиляторы GCC или Clang С++. Любые функции, поддерживаемые этими компиляторами, - это честная игра. Страница совместимости GCC С++ здесь, а страница совместимости Clang С++ здесь.

Ответ 4

Я нашел auto, decltype(), основанный на диапазоне "for (:)" в проекте с кросс-платформой (LLVM для MacOSX, iOS, gcc/linux, MSVC 10/windows).

lambdas и переменные макросы, похоже, не работают в LLVM, но печально.