草庐IT

c++ - "pure virtual function called"在 gcc 4.4 上,但不在新版本或 clang 3.4 上

我有一个MCVE,它在使用g++4.4.7版编译时在我的一些机器上崩溃,但可以在clang++3.4.2版和g++6.3版中使用。我想知道它是来自未定义的行为还是来自这个古老版本的gcc的实际错误。代码#includeclassBaseType{public:BaseType():_present(false){}virtual~BaseType(){}virtualvoidclear(){}virtualvoidsetString(constchar*value,constchar*fieldName){_present=(*value!='\0');}protected:virtu

c++ - 在 Windows 上使用 -faddress-sanitizer 进行 Clang

我的意图是使用Clang作为Windows上Valgrind的替代品,以在我编写的C/C++程序中查找缓冲区溢出、动态内存滥用等.我已经按照提供的说明成功构建了Clanghere.我尝试使用-faddress-sanitizer选项(如here指定)编译一个简单的C程序,然后抛出以下错误-gcc.exe:error:unrecognizedcommandlineoption'-faddress-sanitizer'Usingbuilt-inspecs.COLLECT_GCC=C:/MinGW/bin/gcc.exeTarget:mingw32Configuredwith:../gcc-

c++ - 正如 Clang 似乎表明的那样,这段代码真的是未定义的吗?

我在使用单元测试库Catch的项目上打开了-fsanitize=undefined。来自Catch的一行被此标志指示为导致未定义的行为。我设法做了一个孤立的例子:#include#includeintmain(){std::ostringstreamos;os编译:clang++-fsanitize=undefinedmain.cpp如果我运行它,将给出以下打印:/usr/bin/../lib64/gcc/x86_64-unknown-linux-gnu/4.9.2/../../../../include/c++/4.9.2/bits/ios_base.h:96:24:runtimee

c++ - 我在 Clang 中发现错误了吗?

我尝试用Clang编译下面的代码classPrasoon{staticconstintdummy=0;};intconstPrasoon::dummy=0;intmain(){}上面的代码用Clang.编译没有报错prasoon@prasoon-desktop~$clang++--versionclangversion2.8(trunk107611)Target:i386-pc-linux-gnuThreadmodel:posixprasoon@prasoon-desktop~$catbug.cppclassPrasoon{private:staticconstintdummy=0;}

c++ - clang 上的模棱两可的运算符重载

当我尝试编译这个测试程序时:structcomma_guard{templateconstcomma_guard&operator,(T&&)const{return*this;}};structfoo{};templateToperator,(Tx,foo){returnx;}intmain(){(comma_guard(),foo());}我在clang上得到一个编译错误:comma_guard.cpp:20:19:error:useofoverloadedoperator','isambiguous(withoperandtypes'comma_guard'and'foo')(c

c++ - 返回元组时 GCC/Clang x86_64 C++ ABI 不匹配?

尝试tooptimizereturnvaluesonx86_64时,我注意到一件奇怪的事情。即,给定代码:#include#include#includeusingnamespacestd;constexpruint64_ta=1u;constexpruint64_tb=2u;pairf(){return{a,b};}tupleg(){returntuple{a,b};}Clang3.8outputsf的这个汇编代码:movl$1,%eaxmovl$2,%edxretq这对于g:movl$2,%eaxmovl$1,%edxretq看起来最佳。然而,当compiledwithGCC6.1

c++ - Clang 和二进制折叠表达式——空参数包的诅咒

特别是Clang3.6.0,目前由Coliru托管。所有这些片段都是从以下位置调用的:intmain(){foo();std::cout以下代码:templatevoidfoo(Args...args){std::cout触发以下编译错误:main.cpp:7:17:error:expected';'afterexpressionstd::cout所以我尝试在表达式周围加上括号:(std::cout它可以工作,但会触发警告:main.cpp:7:6:warning:expressionresultunused[-Wunused-value](std::cout'requestedher

c++ - 模板函数中使用的类的前向声明不是由 clang++ 编译的

有这个代码:classA;templatevoidfun(){Aa;}classA{public:A(){}};intmain(){fun();return0;}g++4.5和g++4.7编译它没有错误。但是clang++3.2(trunk)给出了这个错误:main.cpp:5:6:error:variablehasincompletetype'A'Aa;^main.cpp:1:7:note:forwarddeclarationof'A'classA;^那么根据C++标准,哪个编译器是正确的? 最佳答案 Whichcompileri

c++ - 在头文件中使用未声明的标识符 (Clang)

我正在创建一个函数来读取位于IO.cpp文件中的文件内容:#include"IO.h"#include#includeIO::IO(){//ctor}voidIO::readFile(std::stringfileName){std::ofstreaminputFile;inputFile.open(FileName);inputFile>>fileName.toStdString;inputFile.close();std::cout带头文件IO.h:#ifndefIO_H#defineIO_HclassIO{public:IO();voidreadFile(std::stringi

c++ - 如何构建最新的clang-tidy?

我尝试从sources构建clang-tidy但它提示未定义的CMake命令:CMakeErroratclang-apply-replacements/CMakeLists.txt:5(add_clang_library):UnknownCMakecommand"add_clang_library".CMakeWarning(dev)inCMakeLists.txt:Nocmake_minimum_requiredcommandispresent.Alineofcodesuchascmake_minimum_required(VERSION3.9)shouldbeaddedatthet