在Visual Studio

时间:2015-04-29 18:10:16

标签: c++ c++14

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

auto f()
{
return 2;
}

我收到错误,说这是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代码,没有任何问题。

2 个答案:

答案 0 :(得分:17)

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

例如,来自clang-cl' s documentation

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
  ...

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

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

OPTIONS:
  ...
  -Xclang <arg>         Pass <arg> to the clang compiler
  -mllvm <value>        Additional arguments to forward to LLVM's option processing

因此,调用clang-cl -Xclang -std=c++14似乎是您最好的选择。

答案 1 :(得分:3)

我在clang-cl工作。正如antiduh所说,clang-cl试图模仿Visual Studio的clcl直到并包括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也支持{{3}}。它可用于启用C ++ 14(最低级别),C ++ 17,C ++ 20或最新版本。

-Xclang标志是内部标志,不被视为稳定接口。所以不要使用它们。