草庐IT

c++ - 在 travis for clang 上使用不同的 libc++ 版本

Travis使用UbuntuTrusty,默认的libc++版本是svn199600。但是,我想使用不同的(较新的)版本进行测试,就像我已经使用不同的clang版本一样。我的当前.travis.yml如下所示:language:genericdist:trustysudo:requiredmatrix:include:-env:CXX=g++-7CC=gcc-7addons:apt:packages:-g++-7sources:&sources-ubuntu-toolchain-r-test-llvm-toolchain-precise-llvm-toolchain-precise-3

c++ - 在 travis for clang 上使用不同的 libc++ 版本

Travis使用UbuntuTrusty,默认的libc++版本是svn199600。但是,我想使用不同的(较新的)版本进行测试,就像我已经使用不同的clang版本一样。我的当前.travis.yml如下所示:language:genericdist:trustysudo:requiredmatrix:include:-env:CXX=g++-7CC=gcc-7addons:apt:packages:-g++-7sources:&sources-ubuntu-toolchain-r-test-llvm-toolchain-precise-llvm-toolchain-precise-3

c++ - 在通用 lambda 中使用 `if constexpr` 访问成员类型需要两个分支的格式都正确 - gcc 与 clang

考虑两个具有不同成员类型别名的struct:structfoo{usingx=int;};structbar{usingy=float;};在template上下文中给定一个T,我想获得T::x或T::y取决于T是什么:templateautos(){autol=[](autop){ifconstexpr(p){returntypenameT::x{};}else{returntypenameT::y{};}};returnl(std::is_same{});}intmain(){s();}g++编译上面的代码,而clang++产生这个错误:error:notypenamed'y'in

c++ - 在通用 lambda 中使用 `if constexpr` 访问成员类型需要两个分支的格式都正确 - gcc 与 clang

考虑两个具有不同成员类型别名的struct:structfoo{usingx=int;};structbar{usingy=float;};在template上下文中给定一个T,我想获得T::x或T::y取决于T是什么:templateautos(){autol=[](autop){ifconstexpr(p){returntypenameT::x{};}else{returntypenameT::y{};}};returnl(std::is_same{});}intmain(){s();}g++编译上面的代码,而clang++产生这个错误:error:notypenamed'y'in

c++ - 如何在 Windows 上从命令行运行 clang?

在上周的GoingNativesession上,ChandlerCarruth宣布存在用于在Windows上运行clang的预构建二进制文件。博客文章中提供了相同的信息here.目标受众是VisualStudio的用户,但我想从命令行运行clang。我运行了安装程序并将LLVMbin目录添加到我的路径中,但是当我尝试编译“Helloworld”时,我得到了这个:C:\>clanghello.cpphello.cpp:1:10:fatalerror:'iostream'filenotfound#include^1errorgenerated.我找不到任何关于如何配置在Windows上运行

c++ - 如何在 Windows 上从命令行运行 clang?

在上周的GoingNativesession上,ChandlerCarruth宣布存在用于在Windows上运行clang的预构建二进制文件。博客文章中提供了相同的信息here.目标受众是VisualStudio的用户,但我想从命令行运行clang。我运行了安装程序并将LLVMbin目录添加到我的路径中,但是当我尝试编译“Helloworld”时,我得到了这个:C:\>clanghello.cpphello.cpp:1:10:fatalerror:'iostream'filenotfound#include^1errorgenerated.我找不到任何关于如何配置在Windows上运行

c++ - 默认参数,gcc vs clang

代码如下:structFoo{Foo(constchar*);};Foo::Foo(constchar*str=0){}VS2013和gcc4.8.0接受这样的代码,而clang3.3拒绝这样的代码:error:additionofdefaultargumentonredeclarationmakesthisconstructoradefaultconstructor从标准(C++03和C++11)的角度来看,谁是正确的?注意:我也喜欢clang的选择,但是我要向gcc和visualstudio报告bug,如果从标准的角度来看这是不正确的,这有助于说服编译器的开发者解决这个问题。GCC

c++ - 默认参数,gcc vs clang

代码如下:structFoo{Foo(constchar*);};Foo::Foo(constchar*str=0){}VS2013和gcc4.8.0接受这样的代码,而clang3.3拒绝这样的代码:error:additionofdefaultargumentonredeclarationmakesthisconstructoradefaultconstructor从标准(C++03和C++11)的角度来看,谁是正确的?注意:我也喜欢clang的选择,但是我要向gcc和visualstudio报告bug,如果从标准的角度来看这是不正确的,这有助于说服编译器的开发者解决这个问题。GCC

c++ - 如果语句包含宏,则 clang 无法替换语句

我正在使用clang尝试解析(使用C++API)一些C++文件,并使所有大小写-断点对使用特定样式。示例:**Original**switch(...){case1:{}break;case2:{break;}}**Afterreplacement**switch(...){case1:{break;}case2:{break;}}如果代码部分不包含任何宏,我目前所拥有的正是我想要的。我的问题是:clang是否以不同的方式处理扩展(如果我转储有问题的语句,它将显示扩展版本)宏?如果是这样,我怎样才能让它工作?可能有帮助的其他信息:我正在使用Rewriter::ReplaceStmt用新

c++ - 如果语句包含宏,则 clang 无法替换语句

我正在使用clang尝试解析(使用C++API)一些C++文件,并使所有大小写-断点对使用特定样式。示例:**Original**switch(...){case1:{}break;case2:{break;}}**Afterreplacement**switch(...){case1:{break;}case2:{break;}}如果代码部分不包含任何宏,我目前所拥有的正是我想要的。我的问题是:clang是否以不同的方式处理扩展(如果我转储有问题的语句,它将显示扩展版本)宏?如果是这样,我怎样才能让它工作?可能有帮助的其他信息:我正在使用Rewriter::ReplaceStmt用新