草庐IT

gcc-warning

全部标签

c++ - 未定义对 clang 中函数指针的变量模板的引用,但不是 gcc

#includestaticconstexprboolisSSE2=true;templatestaticvoid(*fp)();templatestaticvoidfoo_c(){std::coutstaticvoidfoo_sse2(){std::cout=foo_sse2;elsefp=foo_c;fp();return0;}我有一个使用变量模板的项目,它本身就是一个指向函数的指针。上面的示例代码在GCC6.3中编译和执行良好,但在clang3.9.1中给出警告和错误。$clang++"Source.cpp"-o"foo.exe"-std=c++14-O2Source.cpp:6

c++ - 具有未触及的非 constexpr 参数 : Who is correct, clang 或 gcc 的 constexpr?

我有4个测试用例,我相信它们都是有效的:constexprintf(intconst&/*unused*/){return1;}voidg(intconst&p){constexprinta=f(p);//clangerror,gccvalidintv=0;constexprintb=f(v);//clangvalid,gccvalidintconst&r=v;constexprintc=f(r);//clangerror,gccerrorintn=p;constexprintd=f(n);//clangvalid,gccvalid}intmain(){intp=0;g(p);}Cla

c++ - 我的 g++ 使用 vector<weak_ptr> erase() 方法生成奇怪的警告

我有以下C++代码:#include#include#include#includevoiderase_from_vector(std::vector>&mvec){for(automvec_it=mvec.begin();mvec_it!=mvec.end();)mvec_it=mvec.erase(mvec_it);}intmain(void){#if0std::vector>mvec;for(automvec_it=mvec.begin();mvec_it!=mvec.end();)mvec_it=mvec.erase(mvec_it);#endif}当我这样编译时,GCC会生成

c++ - flto 与 gcc7.2 崩溃

我在以下代码文件中遇到getline崩溃。我构建了gcc7.2,因为系统更新不可用。最小的例子:#includeintmain(intargc,char*argv[]){std::stringline;while(std::getline(std::cin,line)){}return0;}下面几行GCC_INSTALL_DIR代表我自己的gcc安装目录输出:./a.outa***Errorin`./a.out':free():invalidpointer:0x0000000000602200***=======Backtrace:=========/lib64/libc.so.6(+

c++ - 生成具有完整路径的 gcc 依赖项

我有一个看起来像这样的简单项目.├──build│  ├──file1.o│  └──one│  ├──file1.o│  └──file2.o├──.depend├──Makefile└──src  ├──file1.cpp  └──one  ├──file1.cpp  └──file2.cppMakefile是这样的:#GetallofthesourcefilesSRC=$(shellfindsrc/-name"*.cpp")#GetalloftheobjectfilesOBJ=$(substsrc,build,$(SRC:.cpp=.o))$(OBJ):@mkdir-p$(she

c++ - Eigen 与 -O3 警告 : argument 1 value ‘X’ exceeds maximum object size Y

发生了什么当我按照教程onEigenwebsite尝试将Eigen::Vector3f添加到std::vector中时像这样:#include#include#includetemplateusingEigenStdVector=std::vector>;intmain(){EigenStdVectorvec;vec.emplace_back(1.0f,1.0f,1.0f);std::cerr我收到以下警告:Infileincludedfrom/usr/include/eigen3/Eigen/Core:349:0,from/home/igor/Code/eigen_example/e

c++ - 为什么尽管使用了 -isystem,但 clang 在我的标题上报告了警告,而 gcc 没有报告?

与thisquestion稍微相关但不一样。在ArchLinux上使用clang7.0.1。我喜欢干净的代码,所以我想启用所有警告并将它们视为错误。问题是我的构建中有一些自动生成的文件不是没有警告,例如:生成/foo.hinlinevoidfoo(intunused){//warning:unusedparameter'unused'}生成/foo.cc#include"foo.h"//Thereisactualcodehere,butitdoesn'tmatter.由于这些文件是由第三方工具生成的,我不能轻易修改它们,所以我使用-isystem禁止来自generated的所有警告目录

c++ - gcc 与 clang : noexcept parsed in unused template specialization when static casting

我正在尝试将函数指针静态转换为特定函数重载,但似乎clang仍会解析(未使用的)模板特化的noexcept语句,从而生成编译器错误。如果未使用相应的函数重载,GCC似乎并不关心noexcept。templatevoidfun(T)noexcept(T(1)){}voidfun(int){}voidfun(int*){}intmain(){inta;fun(&a);//callingworksfinefun(a);static_cast(&fun);//staticcastingdoesn't}https://godbolt.org/z/ixpl3f这里是哪个编译器出错了?当将函数指针转

c++ - 虚拟继承——gcc 与 vc++

我在使用VisualStudio2008时遇到有关虚拟继承的问题。考虑以下示例:#includeclassPrint{public:Print(constchar*name){std::cout如果我在我的linux机器上使用gcc,这段代码编译得很好。但是,如果我尝试使用VisualStudio在Windows上构建相同的内容,编译将失败并显示错误消息“错误C2614:‘B’:非法成员初始化:‘Print’不是基数或成员。”为什么这不起作用? 最佳答案 来自标准[class.base.init]:“除非mem-initialize

c++ - ubuntu下gcc 4.5安装问题

我尝试在ubuntu10.04上安装gcc4.5但失败了。这是一个编译错误,我不知道如何解决。有没有人在ubuntu上成功安装最新的gcc?以下是我的步骤和错误信息,我想知道问题出在哪里....第一步:下载这些文件:gcc-core-4.5.0.tar.gzgcc-g++-4.5.0.tar.gzgmp-4.3.2.tar.bz2mpc-0.8.1.tar.gzmpfr-2.4.2.tar.gzStep2:解压上述文件Step3:将gmp、mpc、mpfr移动到gcc-4.5.0/目录下。mvgmp-4.3.2gcc-4.5.0/gmpmvmpc-0.8.1gcc-4.5.0/mpcm