草庐IT

gcc_test

全部标签

c++ - GCC/CLang 不同意模板模板参数的部分特化

GCC和clang不同意此代码。#includetemplatetypenameTpl>structstorage{usingtype_t=T;templateusingstorage_tpl=Tpl;};templatetypename>structF{constexprstaticintx=1;};templatestructF{constexprstaticintx=2;};intf(){usingS=storage;static_assert(F().x==2);returnF().x;}根据clangS::storage_tpl不是std::void_t;结果它选择了主模板F

c++ - 为什么 gcc 允许 const 对象没有用户声明的默认构造函数但不允许 clang?

最近Whydoesaconstobjectrequiresauser-provideddefaultconstructor?被标记为WhydoesC++requireauser-provideddefaultconstructortodefault-constructaconstobject?的拷贝.我正在使用coliru和rextexter测试不同版本的gcc(g++-4.7、g++-4.8、g++-4.9)和clang(3.4和3.5),看看新版本的编译器是否引入了这种行为。这里我们有两个测试用例,分别来自两个问题:classA{public:voidf(){}};intmain(

C++ 函数到指针的隐式转换 : which compiler is right? Clang 和 GCC 不同意

templatestructA{};voidfunc();Aa;//sameresultwithAa;此代码使用Clang(包括最新的8.0.0)编译,但不能使用GCC(包括最新的9.1)编译。GCC说:错误:'void()'不是模板非类型参数的有效类型哪个编译器是正确的,为什么?更新我猜GCC是错误的,因为以下代码在Clang和GCC上都可以编译:templatestructA{};voidfunc();Aa;//sameresultwithAa;因此与GCC在第一个示例中的报告相反,void()似乎是“模板非类型参数的有效类型” 最佳答案

c++ - 在 VS 2005(8) IDE 中使用 GCC

有没有办法在利用GCC编译器的同时仍然能够通过VisualStudioIDE进行开发?我们的项目是跨平台的,我经常因为colleague遇到麻烦因为我正在checkin不符合标准的代码(这可以归因于VS编译器!)。我仍然希望能够使用MS编译器进行编译,这样我就可以继续调试等,但是我希望能够切换以使用GCC进行编译,就这样我可以确定我不会破坏其他平台上的构建。这可能吗? 最佳答案 我即将提出的建议仍然需要一个makefile,所以我部分重复了之前回复中的建议。或者,正如前面提到的,也许您已经有了一个makefile,在这种情况下,您将

c++ - 使用 GCC 查找无法访问的函数 ("dead code")

我正在寻找一种在(非常)大的C++项目中查找静态无法访问的函数的方法。我曾尝试使用doxygen和此处建议的其他静态分析工具,但似乎该项目太复杂了,他们无法处理。最后我决定使用GCC工具(g++、gprof、gcov等)是最安全的选择,尽管我不知道该怎么做。我认为g++优化消除了静态无法访问的函数,但我不确定如何获取它消除的函数的名称。你有什么建议吗? 最佳答案 死代码优化通常由链接器完成——编译器没有概览。但是,编译器可能已经删除了未使用的static函数(因为它们具有内部链接)。因此,您不应该查看GCC选项,而应该查看ld选项。

c++ - 如何告诉 Boost.Test 在第一个失败的测试用例上停止?

我在几个测试套件中订购了许多Boost测试用例。有些测试用例有一个,有些不止一个检查。然而,当执行所有测试时,它们都会被执行——不管有多少失败或通过。我知道,我可以通过使用BOOST_REQUIRE而不是BOOST_CHECK来停止执行一个测试用例并进行多次检查。但这不是我想要的。在第一个测试用例失败后,如何告诉Boost停止整个执行?与运行时解决方案(即运行时参数)相比,我更喜欢编译解决方案(例如,使用全局夹具实现)。 最佳答案 BOOST_REQUIRE将停止测试套件中的当前测试用例,但继续进行其他测试。当您要求“编译解决方案”

c++ - 如何调试 STL/C++ 的 GCC/LD 链接过程

我正在使用C++开发裸机cortex-M3,以获取乐趣和利润。我使用STL库是因为我需要一些容器。我认为通过简单地提供我的分配器它不会向最终的二进制文件添加太多代码,因为你只得到你使用的东西。实际上我什至没想到有任何与STL的链接过程(给我的分配器),因为我认为这都是模板代码。顺便说一下,我正在使用-fno-exception进行编译。不幸的是,我的二进制文件中添加了大约600KB或更多。我用nm查看了最终二进制文件中包含的符号,这对我来说似乎是个笑话。列表太长了,我不会尝试跳过它。虽然有一些弱符号。我还查看了链接器生成的.map文件,我什至找到了scanf符号.text0x00015

c++ - GCC 优化 : how can less operations be slower?

在尝试对我的代码的某些选项进行基准测试时(使用或不使用128位整数),我观察到一种我无法理解的行为。任何人都可以阐明这一点吗?#include#include#includeintmain(inta,char**b){printf("Runningtests\n");clock_tstart=clock();unsigned__int128t=13;for(unsignedlongi=0;i(注意这里有printf,这样gcc就不会优化for循环)在我的系统上,这可靠地产生了以下输出:u128,+25,took2.411922su128,no+,took1.799805su64,+25

c++ - 函数参数的析构函数在 gcc 和 MSVC 中被不同地调用

在将一些C++代码从MicrosoftVisualStudio移植到gcc时,我遇到了一个奇怪的错误,我最终将其归结为:#includeusingnamespacestd;classFoo{public:intdata;Foo(inti):data(i){cout如果我使用MicrosoftVisualStudio2015Community编译并运行上述代码,我会得到以下输出:Fooconstructedwith10movectorf.data=10Foodestructedwith10Fooconstructedwith20Foodestructedwith20Foodestruct

c++ - 所有版本的 GCC 都与默认成员初始化器斗争,它捕获了这个,并结合了继承的构造函数

这个故事和我之前的故事相似question.所有支持C++11的GCC版本都具有这种行为。我找不到与我的测试用例有冲突的任何其他编译器。测试用例:structBaseFooWrapper{BaseFooWrapper(intqux){}};structFoo{Foo(BaseFooWrapper&foo):foo(foo){}BaseFooWrapper&foo;};structSomeFooWrapper:publicBaseFooWrapper{usingBaseFooWrapper::BaseFooWrapper;Foofoo{*this};};intmain(){SomeFoo