jjzjj

c++ - g++-6 阴影模板参数错误,而 g++-5 没有

这个问题在这里已经有了答案:Canaparameterofatemplatetemplateparametercauseshadowing?(2个答案)关闭6年前。举个例子:#includetemplateclassContainer>std::vectorTo_Vector(Containerconst&c){returnstd::vector(c.begin(),c.end());}intmain(){}使用g++-5,编译没有错误:g++-5-omainmain.cppg++-6编译失败:g++-6-omainmain.cppmain.cpp:4:33:error:declara

c++ - G++ CAS (__sync_val_compare_and_swap) 问题需要解释

这让我很头疼。我正在尝试实现一些“无锁”代码并使用CAS(gcc__sync_val_compare_and_swap)来完成繁重的工作。我的问题可以用下面的代码显示。volatileboollock;void*locktest(void*arg){for(inti=0;i好的,如果我在10个并发线程中运行上面的代码,一切都很好。但是,如果我将代码改为阅读//acquirealockwhile(__sync_val_compare_and_swap(&lock,lock,true)==true)请注意,我已将“false”更改为“lock”。一切都乱套了,断言//makesureweh

c++ - 如何让 vc++ 和 g++ 在依赖限定类型的类型名方面表现相同?

是否可以为cl.exe提供一个开关,当限定的依赖类型中缺少typename时,它会启用警告或错误?我工作的环境中,开发人员倾向于在一个平台(Windows或Linux)上工作,代码最终每晚都在两个平台上构建。我们遇到了一个问题,人们忘记在Windows上的限定依赖类型上使用typename,VisualC++2008会在可能的情况下自动插入缺失的typename。当他们checkin这样的代码时,它会破坏Linux上的构建,其中g++需要typename。调整Makefile是可取的,这样我们就可以期望在Windows和Linux上有相同的typename行为,以减少构建中断的可能性。

c++ - g++ 实现如何处理这种情况?

这是thisone的后续问题.考虑这个例子:#includeclassA{};classB:publicA{public:inti;virtualvoidFunc()=0;};classC:publicB{public:charc;voidFunc(){}};intmain(){C*pC=newC;A*pA=(A*)pC;std::cout使用VisualStudio2010,输出是(在我的机器上):pC==002DEF90pA==002DEF94(这由问题的acceptedanswer解释)。使用g++,outputis:pC==0x96c8008pA==0x96c8008那么,问题

c++ - 如何在用 gcc(不是 g++)编译的 C 项目中组合 C++ 目标文件?

又一个C/C++集成问题:我正在尝试使用C++库(我们称之为libcl.a)中的功能更新一些遗留C库(我们称之为libcppl.a)。liblc.a库在我的环境中被广泛使用,并链接到许多C项目中,使用GCC(在C编译器模式下):>>gccprog.c-lcllibcl.a目前包括cl.o目标文件(使用gcc从cl.c+cl.h创建)。libcppl.a由cppl.o组成目标文件(使用g++从cppl.cpp+cppl.h创建)。因为现有的应用程序是用C语言编写的,而构建脚本使用的是GCC,所以我希望尽可能简单地过渡到更新后的库。因此,我想继续使用GCC作为主要编译器,但仍然能够链接到更

c++ - g++ 中未定义的 Python 引用

我正在使用以下命令:g++-L/usr/lib/panda3d-L/usr/lib-o"panda3dplayground"./main.o-lpython2.7-lp3pystub-lp3framework-lpandafx-lp3pystub-lpandaexpress-lpanda-lp3framework-lp3direct我收到以下错误:/usr/lib/panda3d/libpanda.so:undefinedreferenceto`PyObject_Cmp'/usr/lib/panda3d/libpanda.so:undefinedreferenceto`PyUnicod

c++ - 为什么 std::stoi 和 std::array 不能用 g++ c++11 编译?

过去几个月我一直在学习C++和使用终端。我的代码使用g++和C++11编译和运行良好,但在过去的几天里它开始出错,从那以后我在编译时遇到了问题。我唯一可以编译和运行的程序依赖于旧的C++标准。我首先得到的错误与头文件中的#include有关。不知道为什么会这样,但我通过使用boost/array来绕过它。我无法解决的另一个错误是std::stoi。array和stoi都应该在C++11标准库中。我编写了以下简单代码来演示发生了什么:////stoi_test.cpp////Createdbyecg//#include#include//stoishouldbeinhereintmain

c++ - 使用地址清理器和静态初始化顺序的附加 asan 标志时,g++ 5 和 6 出现错误

我的图书馆doctest在travisCI上使用200多个构建进行测试-x86/x64调试/发布linux/osx和广泛的编译器-从gcc4.4到6和clang3.4到3.8我所有的测试都是通过valgrind和地址sanitizer(也是UBsanitizer)运行的。我最近发现并非ASAN的所有功能都默认启用-例如:check_initialization_order=truedetect_stack_use_after_return=truestrict_init_order=true所以我启用了它们并开始收到如下例代码的错误。int&getStatic(){staticintd

c++ - 使用 clang++ 和 g++ 的 SFINAE 和 CRTP 的一些魔法

代码下面的代码给出了不同的输出,带有和不带有*注释的行:#include#includetemplateusingbool_void_t=void;templatestructis_complete:std::false_type{};templatestructis_complete>:std::true_type{};templatestructBase{staticconstexprboolvalue=is_complete{};//usingmagic=bool_void_t;//*};structFoo:Base{};intmain(){std::cout输出Thelinem

c++ - gcc和g++之间-Wconversion的区别

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:CanImakeGCCwarnonpassingtoo-widetypestofunctions?考虑以下测试程序:staticvoidfunc(inta){}intmain(){unsignedintb=42;func(b);return0;}用gcc编译:lol@mac:~/projects$gcc-Wconversiontestit.ctestit.c:Infunctionâmainâ:testit.c:11:warning:passingargument1ofâfuncâassignedduetopr