草庐IT

clang_analyzer

全部标签

c++ - 使用 Clang 的函数原型(prototype)中不允许使用“自动”

使用带有std=c++1y标志的Clang3.5、3.6或3.7,以下代码无法编译:#includeautofoo(autobar){returnbar;}intmain(){std::cout给出的错误是:error:'auto'notallowedinfunctionprototype我在使用g++4.9时没有错误。产生此错误是因为Clang尚未实现此功能,还是因为我不允许这样做而GCC以某种方式允许它? 最佳答案 正如我们从ISOC++讨论邮件中看到的:decltype(auto)parametersvs.perfectfor

c++ - 使用 Clang 的函数原型(prototype)中不允许使用“自动”

使用带有std=c++1y标志的Clang3.5、3.6或3.7,以下代码无法编译:#includeautofoo(autobar){returnbar;}intmain(){std::cout给出的错误是:error:'auto'notallowedinfunctionprototype我在使用g++4.9时没有错误。产生此错误是因为Clang尚未实现此功能,还是因为我不允许这样做而GCC以某种方式允许它? 最佳答案 正如我们从ISOC++讨论邮件中看到的:decltype(auto)parametersvs.perfectfor

c++ - 如何在 -std=c++11 -Weverything -Werror 中使用 clang++

我要编译以下文件(temp.cpp):#includeclassFoo{public:Foo()=default;};intmain(){std::cout使用以下命令:clang++temp.cpp-otemp-std=c++11-Weverything-Werror有一个错误:temp.cpp:5:11:error:defaultedfunctiondefinitionsareincompatiblewithC++98[-Werror,-Wc++98-compat]我知道有一个像c++98-compat这样的警告,它是一切的一部分。如何启用除c++98-compat之外的所有警告?

c++ - 如何在 -std=c++11 -Weverything -Werror 中使用 clang++

我要编译以下文件(temp.cpp):#includeclassFoo{public:Foo()=default;};intmain(){std::cout使用以下命令:clang++temp.cpp-otemp-std=c++11-Weverything-Werror有一个错误:temp.cpp:5:11:error:defaultedfunctiondefinitionsareincompatiblewithC++98[-Werror,-Wc++98-compat]我知道有一个像c++98-compat这样的警告,它是一切的一部分。如何启用除c++98-compat之外的所有警告?

c++ - 默认情况下,clang 中是否有一组已知的 `c++11` 功能不需要 `-std=c++11` ?

clang(3.4)似乎自动接受某些c++11(例如auto、for(:))而没有特殊标志(尽管产生警告),但不接受其他部分(例如lambdas).例如下面编译clang++c++11.success.cpp:#includeintmain(intargCount,char**argVec){std::vectorvec;for(auto&item:vec){++item;}return0;}但这失败了clang++c++11.failure.cpp:#includeintmain(intargCount,char**argVec){std::vectorvec;autolambda=

c++ - 默认情况下,clang 中是否有一组已知的 `c++11` 功能不需要 `-std=c++11` ?

clang(3.4)似乎自动接受某些c++11(例如auto、for(:))而没有特殊标志(尽管产生警告),但不接受其他部分(例如lambdas).例如下面编译clang++c++11.success.cpp:#includeintmain(intargCount,char**argVec){std::vectorvec;for(auto&item:vec){++item;}return0;}但这失败了clang++c++11.failure.cpp:#includeintmain(intargCount,char**argVec){std::vectorvec;autolambda=

c++ - gcc和clang的重载解析差异涉及move构造函数和 'Derived(Base&&)'构造函数

GCC(用4.9测试)接受以下测试用例:structBase{};structDerived:Base{Derived();explicitDerived(constDerived&);explicitDerived(Derived&&);explicitDerived(constBase&);Derived(Base&&);};Derivedfoo(){Derivedresult;returnresult;}intmain(){Derivedresult=foo();}Clang(用3.5测试)拒绝它并显示以下错误消息:test.cpp:13:10:error:nomatchingc

c++ - gcc和clang的重载解析差异涉及move构造函数和 'Derived(Base&&)'构造函数

GCC(用4.9测试)接受以下测试用例:structBase{};structDerived:Base{Derived();explicitDerived(constDerived&);explicitDerived(Derived&&);explicitDerived(constBase&);Derived(Base&&);};Derivedfoo(){Derivedresult;returnresult;}intmain(){Derivedresult=foo();}Clang(用3.5测试)拒绝它并显示以下错误消息:test.cpp:13:10:error:nomatchingc

c++ - constexpr 函数中的复合赋值 : gcc vs. clang

templateconstexprintf(Aa,Bb){a/=b;returna;}constexprintx=f(2,2);//a,b:intconstexprinty=f(2.,2.);//a,b:doubleconstexprintz=f(2,2.);//a:int,b:double//代码未在clang中编译,它会产生以下诊断信息:error:constexprvariable'z'mustbeinitializedbyaconstantexpressionMSVC崩溃(根据godbolt)并且gcc工作正常。如果a/=b被简单地替换为a=a/b那么每个人都接受它。为什么?谁

c++ - constexpr 函数中的复合赋值 : gcc vs. clang

templateconstexprintf(Aa,Bb){a/=b;returna;}constexprintx=f(2,2);//a,b:intconstexprinty=f(2.,2.);//a,b:doubleconstexprintz=f(2,2.);//a:int,b:double//代码未在clang中编译,它会产生以下诊断信息:error:constexprvariable'z'mustbeinitializedbyaconstantexpressionMSVC崩溃(根据godbolt)并且gcc工作正常。如果a/=b被简单地替换为a=a/b那么每个人都接受它。为什么?谁