在Visual Studio中的clang中启用C++ 14

The*_* do 12 c++ c++14

我已经安装了clang 3.7并且我正在使用visual studio.当我尝试编译时:

auto f()
{
return 2;
}
Run Code Online (Sandbox Code Playgroud)

我收到错误,说这是C++ 14的未来.我试图传递:
-std = c ++ 14作为编译器参数,但后来我收到错误:

错误1错误:未知参数:' - std = c ++ 14'C :\ Users ...\visual studio 2013\Projects\ConsoleApplication8\ConsoleApplication8\clang-cl.exe ConsoleApplication8.

有关在Visual Studio 2013下如何在clang中启用c ++ 14功能的任何想法?

编辑:
我必须补充说,我能够在Visual Studio下使用此编译器编译和构建c ++ 11代码,没有任何问题.

ant*_*duh 18

clang-cl不使用与传统clang相同的选项语法 - 它应该模仿Visual Studio的cl命令行,而不是clang命令行.

例如,来自clang-cl文档:

CL.EXE COMPATIBILITY OPTIONS:
  /?                     Display available options
  /arch:<value>          Set architecture for code generation
  /C                     Don't discard comments when preprocessing
  /c                     Compile only
  /D <macro[=value]>     Define macro
  ...
Run Code Online (Sandbox Code Playgroud)

请注意,这些选项类似于Microsoft的cl选项语法,而不是clang选项语法.

但是,他们有一个小的传递选项来支持像你这样的案件:

OPTIONS:
  ...
  -Xclang <arg>         Pass <arg> to the clang compiler
  -mllvm <value>        Additional arguments to forward to LLVM's option processing
Run Code Online (Sandbox Code Playgroud)

所以看起来调用clang-cl -Xclang -std=c++14是你最好的选择.

  • @Thereisnothingwecando完全猜测:垫片旨在接受VS想要将其传递给它的编译器(cl)的参数.他们没有教VS怎么跟铿锵说话,而是写了一艘船(clang-cl),用来翻译VS用来与cl进行交谈的争论.如果你想直接与*说话,你必须"逃避"你的论点.通过"任何争论clang-cl不知道是一个cl论点"来铿锵将是一个危险的混乱:白名单比黑名单更安全. (3认同)

tha*_*kis 6

我在 clang-cl 上工作。正如 antiduh 所说,clang-cl 试图模仿 Visual Studio 的cl. cl直到并包括 c++14 没有启用语言模式的开关,它总是启用所有最新的东西。因此,clang-cl 也是如此。MSVC 在 MSVC 2015 中获得了一些 C++14 支持,因此如果您告诉 clang-cl 您希望它模拟 MSVC 2015 或更高版本,它将自动启用 C++14。默认情况下,clang-cl 模拟在您的系统上找到的 MSVC 版本。您可以显式传递-fmsc-version=1900到强制模拟 2015,然后隐式启用 C++14。

从 MSVC 2017 开始, cl.exe 支持/std:flag,因此 clang-cl 也支持。它可用于启用 C++14(最低级别)、C++17、C++20 或最新已知版本。

这些-Xclang标志是内部标志,不被视为稳定的接口。所以不要使用那些。