Posso usar C ++ 11 com Xcode?

86

Estou considerando o uso de alguns recursos do C ++ 11 (como autopor exemplo) em alguns projetos de plataforma cruzada (Windows + Mac). No Windows, o Visual Studio oferece suporte a partes do próximo padrão C ++ 11 que me permitiria simplificar partes da base de código, então, naturalmente, eu estaria interessado em começar a usar esses recursos.

Mas, pelo que eu sei, a versão atual do XCode (3.2.4 + GCC 4.2) não oferece suporte a nenhum recurso do C ++ 11. Posso atualizar a versão GCC ou a versão CLang de alguma forma? Ou devo apenas morder minha língua e esperar que a Apple empacote uma nova versão no futuro?

Villintehaspam
fonte
Veja as respostas aqui e ali .
F'x 01 de
Para um resultado mais positivo, veja: stackoverflow.com/questions/837992/update-gcc-on-osx
David Rodríguez - dribeas 01 de
Em relação ao Clang: acredito que ele obteve suporte razoável para C ++ 03 recentemente, mas C ++ 0x ainda é um objetivo distante. Por exemplo, o suporte do modelo variadic é um trabalho em andamento e as referências de semântica / rvalue de movimentação ainda não foram implementadas.
Matthieu M.
Modelos variados funcionam bem para mim com clang.
Alexandre Hamez

Respostas:

76

O Xcode 4.2 finalmente adicionou suporte para C ++ 0X:

  1. Na tela de configurações de construção do projeto, ative as opções "Todas".

  2. Na seção "Opções de construção", defina o compilador como "Compilador Apple LLVM 3.0".

  3. Role para baixo até a seção "Apple LLVM Compiler 3.0 - Language" e defina "C ++ Language Dialect" como "C ++ 0X" e "C ++ Standard Library" como "libc ++".

O std :: move (), o construtor de movimento e a referência de valor R funcionam como esperado, e estou testando no std :: thread e std :: atomic.

RichardLiu
fonte
2
@RichardLiu, que tal a GNU++0Xopção pelo C++ Language Dialecte a libstdc++opção pelo C++ Standard Library? Quando eles devem ser usados?
Tin
Dei uma olhada /Developer/About\ Xcode.pdfe sim, diz que C ++ 11 é compatível, mas quando eu uso -std=gnu++0xele solta cc1plus: error: unrecognized command line option "-std=0x++"! Devo usar em clang++vez disso?
errordeveloper
@errordeveloper, até agora eu só tinha compilado com sucesso o C ++ 11 DENTRO do Xcode IDE. Não sei como habilitar o C ++ 11 na linha de comando ou makefile. Desculpe.
RichardLiu
1
@RichardLiu: O XCode normalmente usa clang++ao compilar, não g++, é por isso que o suporte a C ++ 11 falha ao tentar usar a g++partir da linha de comando (porque o antigo g++XCode fornece não o suporta). Apenas para sua informação.
Cornstalks
9

======= Atualização 2012: =======

Comece com o Clang - muitos recursos do C ++ 11 agora estão disponíveis no Clang. Ele está incluído no Xcode.

======= Resposta original de janeiro de 2011: =======

o compilador da Intel pode ser a maneira mais limpa de se fazer neste momento. http://software.intel.com/en-us/articles/intel-composer-xe/

o clang é promissor, mas não é particularmente estável ou apresenta recursos do wrt c ++ 0x. c ++ ainda é muito novo para o clang.

gcc: relativamente maduro, mas você terá que escrever e manter seus plug-ins de compilador para xcode.

você também pode especificar scripts personalizados, mas isso é difícil de manter ... a menos que você faça tudo e crie uma ferramenta adaptadora.

justin
fonte
1

O Xcode usa os compiladores GCC ou Clang C ++. Quaisquer recursos suportados por esses compiladores são válidos. A página de compatibilidade C ++ do GCC está aqui e a página de compatibilidade Clang C ++ está aqui .

Barry Wark
fonte
2
Verdade, mas o suporte do GCC para em 4,2, que está começando a ficar um pouco longo
Mattia
0

Descobri que auto, decltype (), range based "for (:)" funciona em um projeto de plataforma cruzada (LLVM para MacOSX, iOS, gcc / linux, MSVC 10 / windows).

lambdas e macros variadic não parecem funcionar no LLVM, infelizmente.

centaurian_slug
fonte
1
MSVC 10 e 11 não oferecem suporte para baseado em intervalo. O Clang, por outro lado, é compatível com modelos variados perfeitamente.
Alex B