草庐IT

c++ - 据我所知,下面的函数不是 constexpr,而是用 clang 和 g++ 编译的代码。我错过了什么?

我从N4140的§5.19/2中得到这个例子:constexprintincr(int&n){return++n;}据我所知,这不是一个constexpr函数。但是这段代码是用clang和g++编译的。参见liveexample.我在这里缺少什么? 最佳答案 在C++14中,constexpr函数的规则放宽了,论文N3597:Relaxingconstraintsonconstexprfunctions.该论文探讨了基本原理和效果,包括以下内容(强调我的):AsinC++11,theconstexprkeywordisusedtom

c++ - 我相信这是 clang++ 中与访问类的公共(public)成员函数相关的错误

以下doesn'tcompile在clang中:#includevoidf(){std::cout产量:main.cpp:13:16:error:unknowntypename'p';didyoumean'S::p'?s.operatorp()();^S::pmain.cpp:6:19:note:'S::p'declaredheretypedefvoid(*p)();^但它应该,因为表达式s.operatorp()()访问对象S::s的公共(public)成员函数。我错过了什么吗?如果我错了,我将不胜感激标准中的引述来支持答案。 最佳答案

c++ - 使用自动时不检查数组边界

当有thiscode使用-Warray-bounds编译。我在声明array2arrayindex3ispasttheendofthearray(whichcontains3elements)时收到警告。但不是在声明array1时,即使它必须是相同的类型,因此携带相同的大小信息。这是clang中的错误吗?enumclassFormat:int{Off=55,FormatA=66,FormatB=77,};inlineFormat(&AllFormats())[3]{staticFormatvalues[]={Format::Off,Format::FormatA,Format::For

c++ - clang 和 gcc 在使用智能指针时不会警告多态性的非虚基析构函数?

我们知道如果有虚函数那么基类析构函数也应该被标记为虚函数,否则当使用基类指针显式删除时它是未定义的行为如果我们希望删除带有基类指针的派生对象,基类析构函数应该被标记为虚拟的,否则就是未定义的行为。例如,structBase{virtualvoidgreet(){std::cout打电话Base*b=newDerived;b->greet();delete(b);当-Wdelete-non-virtual-dtor时,clang(gccsimilarly)会发出这样的警告:deletecalledon'Base'thathasvirtualfunctionsbutnon-virtuald

c++ - "Template argument for template template parameter must be a class template or type alias template"

templatestructList{};templateclass>structListHelper;templatestructListHelper>{};^/*Error:Templateargumentfortemplatetemplateparametermustbeaclasstemplateortypealiastemplate*/怎么了?我正在使用clang++SVN。 最佳答案 您有一个模板模板参数。您必须传递一个模板作为其参数。您改为将模板实例化作为其参数传递-这是一个具体类,而不是模板(其所有参数均已绑定(bi

c++ - gnu缩进的谷歌c风格设置?

我正在为Emacs(google-c-style.el)和Vim(google.vim)使用googlec缩进样式。但是因为我有一些现有的代码不是这种风格,我希望我能改变它。我发现有一个叫做GNUindent的工具可以自动做这样的事情,它在thispage上提供了一些常用的样式设置。,但是没有适用于Googlec的缩进样式。那么它也有等价物吗?(我尝试了Linux和Berkley风格,感觉它们对我来说绝不是令人满意的) 最佳答案 郑重声明,对于那些对Clang和LLVM感兴趣的人,还有一个替代解决方案。clang-format绝对可

c++ - Clang 链接 .so 文件

我一直在努力ld:librarynotfoundfor-lchaiscript_stdlib-5.3.1.soclang:error:linkercommandfailedwithexitcode1(use-vtoseeinvocation)尝试链接到.so文件时。我正在使用这个命令:clang++Main.cpp-ofoo-L./-lchaiscript_stdlib-5.3.1.so我做错了什么?文件libchaiscript_stdlib-5.3.1.so与文件Main.cpp位于同一目录中。我认为-L./会将.so添加到库搜索路径中。 最佳答案

c++ - 检索有关预处理器指令的信息

我最近开始使用libclang来解析C文件。我遇到的问题显然是,libclang在生成AST之前启动了预处理器。我想禁止预处理器运行,而是提供预处理器指令在文件中的信息...我使用以下python脚本(cindex.py和libclang)importcodecsfromclang.cindeximport*classSourceFile(object):def__init__(self,path):withcodecs.open(path,'r','utf-8')asfile:self.file_content=file.read()index=Index.create()root_

c++ - 如何使用额外的解析器扩展 Clang?

我如何使用额外的解析器扩展Clang,以处理具有特殊文件结尾的文件,即我可以开发一个FrontendAction来表示“嘿!我会处理所有文件结尾的文件'.lorem'并返回抽象语法树(clang::ASTContext?)"?我读过clang::FrontendAction、clang::Parser和clang::driver::Driver但我还没有我无法弄清楚我应该在哪里以及如何扩展Clang,以便能够使用额外的解析器扩展编译器(不是扩展当前的解析器)。 最佳答案 这里有一些提示:在tools/clang/lib/Driver

c++ - 为什么 clang 无法使用默认的 integer_sequence 实例化嵌套的可变参数模板?

考虑一个例子:#includetemplatestructpack{staticconstexprstd::size_tsize=sizeof...(Ts);};template>structipack;templatestructipack,std::index_sequence>{staticconstexprstd::size_tsize=sizeof...(Ts);};template>structvpack;templatestructvpack>,std::index_sequence>{staticconstexprstd::size_tsize=sizeof...(Ts