草庐IT

c++ - 不接受静态成员函数作为 constexpr 参数

以下代码被clang接受并被gcc拒绝。我想知道这是一个错误还是我遗漏了什么:#includetemplatestaticconstexprTApply(Tin,Tfun(T)){returnfun(in);}templatestructTriangle{usingAr=std::array;staticconstexprArfoo(Arline){returnline;}staticconstexprArresults=Apply({{1}},foo);//foo({1});isok};templateconstexprstd::arrayTriangle::results;intm

c++ - 抑制 GCC 警告

我有代码:#ifdefQ_OS_LINUX#pragmaGCCdiagnosticpush#pragmaGCCdiagnosticignored"-Wcomment"#include"header.h"#pragmaGCCdiagnosticpop#endif而且我想禁止与header.h和header.h中包含的所有header相关的GCC警告消息。但我仍然收到与header.h中包含的header相关的“-Wcomment”警告。我怎样才能避免这种情况?谢谢海湾合作委员会4.8.2编辑:我收到的警告如下所示:/------SetAnalogOutputfor8022/8026---

c++ - 仅在 Boost.Spirit.Qi 语法初始化的优化构建中出现段错误

我在使用SpiritQi编写解析器时遇到了一个奇怪的问题:我在某个地方有一个错误导致-O优化崩溃,但并非没有优化。它在语法的构造函数中崩溃:templatestructmath_expression_grammar:qi::grammar{qi::ruleexpression,term,factorial,factor,pexpression,pfactor,nfactor,number;math_expression_grammar():math_expression_grammar::base_type(expression){usingnamespaceboost::spirit

c++ - GCC 无法矢量化 64 位乘法。可以在 AVX2 上矢量化 64 位 x 64 位 -> 128 位加宽乘法吗?

我尝试对使用64位加宽乘法的CBRNG进行向量化。static__inline__uint64_tmulhilo64(uint64_ta,uint64_tb,uint64_t*hip){__uint128_tproduct=((__uint128_t)a)*((__uint128_t)b);*hip=product>>64;return(uint64_t)product;}这样的乘法在AVX2中是否以vector形式存在? 最佳答案 没有。没有64x64->128位算术作为vector指令。也没有vectormulhi类型的指令(乘

c++ - GCC 向依赖默认构造函数的模板化类中的静态数据成员给出 "undefined reference"错误

我遇到了类似的问题:"undefinedreference"tostaticfieldtemplatespecialization但他们使用的解决方法对我不起作用。我有一个带有静态数据成员的CRTP类,其中之一是std::mutex。不幸的是,GCC(4.8.2)的链接器给我这个互斥锁的“undefinedreference”错误。Clang(3.4)没有。有解决方法吗?最初的问题(上面链接)在静态数据成员上调用了复制构造函数,迫使GCC发出一个符号,但是由于我的数据成员是std::mutex,所以这不是一个选项——复制构造函数被删除,并且有没有参数构造函数。我只是被冲洗了吗?我认为问

c++ - 是否有可能从 gcc 或 clang 获得 Lexer 输出?

是否可以让clang或gcc显示词法分析阶段的结果? 最佳答案 虽然解析器doespollthelexer如果没有适当的“词法分析阶段”,这并不意味着您不能在词法分析时转储token。这是通过命令完成的:clang-fsyntax-only-Xclang-dump-tokenscode.c 关于c++-是否有可能从gcc或clang获得Lexer输出?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/

c++ - GCC Address Sanitizer - 将库函数列入黑名单(特别是 boost::test)

我所有的单元测试代码都基于boost::test。我刚刚尝试了GCCAddresssanitizer,它报告了boost::test的一些问题:==25309==ERROR:AddressSanitizer:heap-use-after-freeonaddress0xf5801344atpc0x8259412bp0xff9966c8sp0xff9966bcREADofsize4at0xf5801344threadT0#00x8259411inboost::unit_test::framework::run(unsignedlong,bool)../common/lib/boost/bo

c++ - 强制在堆栈中而不是全局分配 char[] (string)

我试图强制编译器在堆栈中分配内联字符串:此代码分配.rdata部分中的字符串:foo("test");当这段代码在栈中分配字符串时:charszt1[]="test1";foo(szt1);这正是我想要强制执行的。如何强制编译始终在堆栈中分配数组?我正在使用gcc。谢谢 最佳答案 没有好的方法可以做到这一点,而且可能没有太多好的理由需要这种行为。如果您不希望该字符串存在于数据段中,最接近的做法是分配一个char的自动数组并将字符分配给它,一次一个。charhello[6]={};hello[0]='h';hello[1]='e';h

c++ - 使用 MSVC 编译的多线程应用程序在运行时失败

我已经实现了一个循环运行提供的函数的类。//Timer.h#include#include#includeclassTimer{public:Timer(conststd::chrono::millisecondsperiod,conststd::function&handler);~Timer();voidStart();voidStop();boolIsRunning()const;private:conststd::function&handler;conststd::chrono::millisecondsperiod;boolisRunning=false;mutablest

c++ - 将 unique_ptr 引用传递给 boost::bind?

我在CentOS6.6(gcc4.4.7)上使用Boost.Asio(1.41)进行开发。我希望io_service在启动时调用manger对象m中的成员函数run()。我尝试编译的代码如下所示:#include#include#includeboost::asio::io_serviceio;std::unique_ptrm;m=std::make_unique;io.post(boost::bind(&manager::run,&m));gcc对boost::bind语句进行了调整,其中包括:/usr/include/boost/bind/mem_fn_template.hpp:4