Como habilitar a compilação do C ++ 17 no Visual Studio?

120

Quero usar recursos do C ++ 17.

Como posso alternar a compilação de C ++ 14 para C ++ 17 no Microsoft Visual Studio?

Ou não está disponível nas versões de lançamento do VS?

Tudvari
fonte
4
Quais recursos do C ++ 17? Qual versão do Visual Studio? Se você está perguntando sobre C ++ 17, por que marcou sua pergunta c++11e c++14?
ildjarn
6
c ++ 17 não estava disponível, e eu pensei que aqueles que estão interessados ​​em versões específicas de C ++ sabem melhor como trocá-lo. Por exemplo, quero que std :: vector.emplace_back () forneça uma referência ao elemento recém-criado. Eu conheço essa linha +1 e recebo essa referência, mas gostaria de saber a resposta à minha pergunta mesmo assim. VS Community 2015 (14.0.25431.01 Atualização 3)
Tudvari
Você provavelmente deve verificar aqui: blogs.msdn.microsoft.com/visualstudio
Mikel F
3
Você não pode habilitar dialetos de idiomas específicos no VS, você obtém tudo o que eles implementaram. Você pode ter muita sorte com os recursos da biblioteca padrão votados no C ++ 17 se estiver usando o VS21015, mas não tanto com os recursos de linguagem.
Pretoriano de
1
@preat MSVC 2017 tem uma configuração "mais recente", mas que ainda não foi lançada.
Yakk - Adam Nevraumont

Respostas:

161

Agora há uma lista suspensa (pelo menos desde o VS 2017.3.5) onde você pode selecionar especificamente C ++ 17. As opções disponíveis são (em projeto> Propriedades> C / C ++> Linguagem> Padrão de linguagem C ++)

  • Padrão ISO C ++ 14. opção de linha de comando msvc:/std:c++14
  • Padrão ISO C ++ 17. opção de linha de comando msvc:/std:c++17
  • O mais recente projeto de padrão. opção de linha de comando msvc:/std:c++latest

(Aposto que assim que o C ++ 20 for lançado e for mais totalmente compatível com o Visual Studio, será /std:c++20)

Johan Lundberg
fonte
3
A sintaxe -std:c++14, -std:c++17e -std:c++latesttambém funciona, por exemplo, quando você preferir inserir manualmente as opções do compilador (testado com VS2017).
Roi Danton
Isso já não está claro com a resposta ou você se refere especificamente -às /std:opções que listo?
Johan Lundberg
3
Eu vejo o benefício ao vir de gccou clang. Então, o -é menos intrusivo (no entanto, a sintaxe ainda difere ligeiramente (em :vez de =)).
Roi Danton
No VS 2019, para chegar às Propriedades do Projeto, vá até "Solution Explorer", clique com o botão direito no título do projeto e selecione Propriedades. Em seguida, siga as instruções deste post.
BabarBaig
1
@AndreiKrasutski. Não há ISO C ++ 20 ainda, mas algum suporte em / std: c ++ mais recente. O padrão C ++ 20 é esperado no próximo ano. Eu editei em um comentário em minha resposta.
Johan Lundberg
31

MSBuild (projeto / solução do Visual Studio * .vcproj / *. Sln ) :

Adicione a opções adicionais em Configurações do projeto: /std:c++latestpara habilitar os recursos mais recentes - atualmente C ++ 17 a partir do VS2017, VS2015 Atualização 3.

https://blogs.msdn.microsoft.com/vcblog/2016/06/07/standards-version-switches-in-the-compiler/

/permissive- irá desativar as extensões C ++ não padrão e irá ativar a conformidade padrão no VS2017.

https://blogs.msdn.microsoft.com/vcblog/2016/11/16/permissive-switch/

EDITAR (outubro de 2018): Os recursos mais recentes do VS2017 estão documentados aqui:

https://docs.microsoft.com/en-gb/cpp/build/reference/std-specify-language-standard-version

VS2017 suporta: /std:[c++14|c++17|c++latest]agora. Esses sinalizadores podem ser definidos por meio das páginas de propriedades do projeto:

Para definir esta opção de compilador no ambiente de desenvolvimento Visual Studio

  1. Abra a caixa de diálogo Property Pages do projeto. Para obter detalhes, consulte Trabalhando com propriedades do projeto.
  2. Selecione Propriedades de configuração, C / C ++, linguagem.
  3. No C ++ Language Standard, escolha o padrão de idioma para oferecer suporte no controle suspenso e escolha OK ou Aplicar para salvar suas alterações.

CMake :

Visual Studio 2017 (15.7+) oferece suporte a projetos CMake. O CMake torna possível habilitar recursos modernos do C ++ de várias maneiras. A opção mais básica é habilitar um padrão C ++ moderno definindo uma propriedade de destino em CMakeLists.txt:

add_library (${PROJECT_NAME})
set_property (TARGET ${PROJECT_NAME}
  PROPERTY
    # Enable C++17 standard compliance
    CXX_STANDARD 17
)

No caso de uma biblioteca de interface:

add_library (${PROJECT_NAME} INTERFACE)
target_compile_features (${PROJECT_NAME}
  INTERFACE
    # Enable C++17 standard compliance
    cxx_std_17
)
Zingam
fonte
Eu fiz a lista suspensa no meu VS2017, mas ainda assim o compilador continua aplicando o padrão C ++ 98, que diabos
Travis Su
5

Se trouxer a solução Visual Studio 2015 existente para o Visual Studio 2017 e você quiser criá-la com o compilador nativo c ++ 17, você deve primeiro redirecionar a solução / projetos para v141, ENTÃO a lista suspensa aparecerá conforme descrito acima (Propriedades de configuração -> C / C ++ -> Idioma -> Padrão de idioma)

WilliamClements
fonte
2

Versão do Visual Studio 2019:

O menu suspenso foi movido para:

  • Clique com o botão direito no projeto (não na solução)
  • Propriedades (ou Alt + Enter)
  • No menu esquerdo, selecione Propriedades de configuração
  • Geral
  • No meio, há uma opção chamada "C ++ Language Standard"
  • Ao lado dele está o menu suspenso
  • Aqui você pode selecionar Padrão, ISO C ++ 14, 17 ou mais recente
sanitizedUser
fonte