草庐IT

gcc_test

全部标签

c++ - 如何制作适用于 gcc 4.6 的递归 boost::variant?

我正在解码bencode,并且有一些代码适用于gcc4.4。但是最近升级到gcc4.6后,此代码不再生成:#ifndefBENCODE_VALUETYPES_H#defineBENCODE_VALUETYPES_H#include#include#include#includenamespacebencode{typedefboost::make_recursive_variant,std::map>::typeValue;typedefstd::mapValueDictionary;typedefstd::vectorValueVector;};#endifg++给出了这个错误信息:

c++ - 在 GCC 4.7.2 和 Clang 3.2 中显然缺少 getline() 的重载,将 RRef 流式传输

我在尝试将getline()与临时流对象一起使用时遇到了意外的编译错误:#include#include#includeusingnamespacestd;intmain(){stringinput="hello\nworld\nof\ndelimiters";stringline;if(getline(stringstream(input),line))//ERROR!{cout看起来不存在接受对流对象的右值引用的getline()重载。如果我将main()更改为使用左值,它会按预期编译和运行:intmain(){stringinput="hello\nworld\nof\ndeli

c++ - GCC- 无效使用 Register

我正在VS2012和GCC(CodeBlocks)下为Windows编译一个项目。在VS2012上一切正常。在GCC下,我得到以下编译错误:C:\Users\Piotrek\AppData\Local\Temp\ccfdl0Ye.s|164|Error:invaliduseofregister|C:\Users\Piotrek\AppData\Local\Temp\ccfdl0Ye.s|166|Error:invaliduseofregister|C:\Users\Piotrek\AppData\Local\Temp\ccfdl0Ye.s|221|Error:invaliduseofr

c++ - GCC 4.7.2:带有指向成员函数指针的 std::thread

正在为thisquestion写测试代码我发现下面的注释行无法在GCC4.7.2上编译:#include#includestructS{voidf(){std::cout但cppreference似乎声称“this”参数可以等效地作为对象、对象引用或对象指针传递:IffispointertoamemberfunctionofclassT,thenitiscalled.Thereturnvalueisignored.Effectively,thefollowingcodeisexecuted:(t1.*f)(t2,...,tN)ifthetypeoft1iseitherT,referen

c++ - GCC 4.8.1、C++11、共享库和异常处理问题

我的项目包括以下内容:我的程序,主要是用C++11编写的(因此尝试在C++03模式下编译它是不切实际的)共享库(https://github.com/SOCI/soci),使用相同的编译器编译SOCI抛出我需要在我的代码中捕获的异常。它曾经与GCC4.7.3一起使用,但现在我已经迁移到GCC4.8.1它不再适用了:异常会通过所有处理程序(包括catch(...))并导致终止:terminatecalledafterthrowinganinstanceof'soci::mysql_soci_error'what():Table'brphrprhprh'doesn'texistThepro

c++ - clang 和 gcc 中的这个警告似乎不正确

我相信BjarneStroutrup的新书TCPL第4版第66页中的示例有一个小错误,因为classVector_container没有std::initializer_list构造函数。错误信息here证实了这一点。#includeclassVector{double*elem;intsz;public:Vector(ints):elem{newdouble[s]},sz{s}{for(inti=0;i!=sz;++i)elem[i]=0;}Vector(std::initializer_listlst):elem{newdouble[lst.size()]},sz(lst.size

c++ - boost::test 中是否有可以返回错误值的函数?

BoostTestLibrary是一个非常有用的单元测试框架。但是,我感到不舒服的一件事是,在单元测试期间,如果发生错误,它会通知用户而不是程序本身。让我以BOOST_CHECK为例来阐明我的观点:i=3;j=4;BOOST_CHECK(i==j);上面的测试用例会失败。因此,检查细节以找出此测试失败的原因将非常有趣。在这种情况下,如果程序知道单元测试失败,打印一些变量或执行更复杂的操作(例如将文件写入磁盘)将是必要的。但是,BOOST_CHECK不会返回一个值来表示测试是否成功。一个完美的函数应该是这样的:i=3;j=4;if(Enhanced_BOOST_CHECK(i==j)==

c++ - 当返回类型是一个类时,带有尾随返回类型的 GCC 属性警告

当返回类型是类时,GCC4.9.1似乎不喜欢带有尾随返回类型和属性的函数声明。考虑以下简单的测试用例:structbar{inta;bar(inta):a(a){}};autofoo()->bar__attribute__((unused));autofoo()->bar{returnbar(5);}intmain(){return0;}GCC打印关于属性的奇怪警告:argh.cpp:2:41:warning:ignoringattributesappliedtoclasstype‘bar’outsideofdefinition[-Wattributes]autofoo()->bar_

c++ - 两次 GCC 编译相同的输入,生成两个不同的代码(第二个错误)

我有时会遇到GCC(4.6.4,Ubuntu12.04)的奇怪问题,我正在使用它来编译一个巨大的项目(数百个文件和数十万行代码),但我最近发现了一些东西。在某些编译之后(似乎是随机发生的),我得到了一段特定的代码,编译方式不同且错误,导致我的代码出现未定义的行为:classsomeDerivedClass:publicsomeBaseClass{public:structanotherDerived:publicanoterBaseClass{voidSomeMethod(){someMember->someSetter(2);}}}其中“someSetter”定义为:voidsome

c++ - gcc 中的模糊重载,适用于 msvc

以下代码在msvc18.00上编译良好,但在gcc4.9.1上编译失败:#includetemplateclassNum{};classZero{};templateNumoperator+(Num,Num){return{};}templateZerooperator+(Num,Num){return{};}intmain(){Numone;Nummone;Numnull;autoa=one+one;static_assert(std::is_same>::value,":(");autob=one+mone;static_assert(std::is_same::value,":(